SSH命令

SSH命令

ssh 命令,Linux ssh 命令详解:openssh套件中的客户端连接工具

openssh套件中的客户端连接工具

ssh命令 是openssh套件中的客户端连接工具,可以给予ssh加密协议实现安全的远程登录服务器。

语法

1
ssh(选项)(参数)

选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
-1:强制使用ssh协议版本1;
-2:强制使用ssh协议版本2;
-4:强制使用IPv4地址;
-6:强制使用IPv6地址;
-A:开启认证代理连接转发功能;
-a:关闭认证代理连接转发功能;
-b:使用本机指定地址作为对应连接的源ip地址;
-C:请求压缩所有数据;
-F:指定ssh指令的配置文件;
-f:后台执行ssh指令;
-g:允许远程主机连接主机的转发端口;
-i:指定身份(私钥)文件;
-l:指定连接远程服务器登录用户名;
-N:不执行远程指令;
-o:指定配置选项;
-p:指定远程服务器上的端口;
-q:静默模式;
-X:开启X11转发功能;
-x:关闭X11转发功能;
-y:开启信任X11转发功能。

参数

  • 远程主机:指定要连接的远程ssh服务器;
  • 指令:要在远程ssh服务器上执行的指令。

实例

1
2
3
4
5
6
7
8
9
# ssh 用户名@远程服务器地址
ssh user1@172.24.210.101
# 指定端口
ssh -p 2211 root@140.206.185.170

ssh -p 22 user@ip # 默认用户名为当前用户名,默认端口为 22
ssh-keygen # 为当前用户生成 ssh 公钥 + 私钥
ssh-keygen -f keyfile -i -m key_format -e -m key_format # key_format: RFC4716/SSH2(default) PKCS8 PEM
ssh-copy-id user@ip:port # 将当前用户的公钥复制到需要 ssh 的服务器的 ~/.ssh/authorized_keys,之后可以免密登录

连接远程服务器

1
ssh username@remote_host

连接远程服务器并指定端口

1
ssh -p port username@remote_host

使用密钥文件连接远程服务器

1
ssh -i path/to/private_key username@remote_host

在本地执行远程命令

1
ssh username@remote_host "command"

在本地复制文件到远程服务器

1
scp path/to/local_file username@remote_host:/path/to/remote_directory

在本地端口转发到远程服务器

1
ssh -L local_port:remote_host:remote_port username@remote_host

在远程服务器端口转发到本地

1
ssh -R remote_port:local_host:local_port username@remote_host

生成SSH密钥

打开终端或命令提示符

使用以下命令生成SSH密钥。默认情况下,ssh-keygen将创建一个2048位的RSA密钥对

1
2
3
4
ssh-keygen -t rsa -b 2048

#指定了密钥的路径
ssh-keygen -t rsa -b 2048 -f /path/to/your/id_rsa

如果你不指定路径,ssh-keygen 将默认在用户的 ~/.ssh/ 目录下创建密钥对文件。

生成密钥后,你将在指定的路径下找到两个文件,私钥文件(通常为 id_rsa)和公钥文件(通常为 id_rsa.pub)。

如果需要,可以为密钥对设置密码。这是可选的,但是为私钥加上密码可以提高安全性。

在成功生成密钥对后,你将在指定的路径(或默认路径)下找到两个文件:id_rsa(私钥)和id_rsa.pub(公钥)。

注意

私钥,公钥文件的权限设置不能太宽松,不符合SSH的安全要求。SSH要求私钥文件的权限必须只允许文件所有者读写,而不允许其他用户访问。

1
2
chmod 600 .\ssh\id_rsa
chmod 600 .\ssh\id_rsa.pub

配置SSH密钥

  1. 将公钥复制到远程服务器的~/.ssh/文件夹中

    或使用以下命令将公钥复制到远程服务器。

    替换your_usernameyour_hostname_or_ipyour_ssh_path为实际的用户名、主机名或IP地址以及远程服务器的SSH路径。

    1
    ssh-copy-id -i ~/.ssh/id_rsa.pub your_username@your_hostname_or_ip -p your_ssh_port
  2. 检查服务器的SSH配置

    确保远程服务器的SSH配置允许使用密钥进行身份验证。检查远程服务器上的 /etc/ssh/sshd_config 文件,确保以下配置存在:

    1
    2
    PubkeyAuthentication yes
    AuthorizedKeysFile .ssh/id_rsa.pub

    然后重启SSH服务:

    1
    sudo systemctl restart ssd.service

SSH连接脚本示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#!/bin/bash


# 服务器列表
servers=("bandwagon" "justvps" "cloudvone")

# 显示可连接的服务器列表
echo "Available Servers:"
for ((i=1; i<=${#servers[@]}; i++)); do
echo "$i. ${servers[i-1]}"
done

# 用户选择服务器
read -p "Enter the number of the server to connect: " choice


# 检查选择的有效性
if [[ ! "$choice" =~ ^[1-${#servers[@]}]$ ]]; then
echo "Invalid selection."
exit 1
fi

# 根据选择设置服务器相关信息
selected_server="${servers[choice-1]}"

# 设置服务器相关信息
server_username="root"
server_port="27751"
private_key_path="/root/vpsSecretKey/ssh"

case $selected_server in
"bandwagon")
server_hostname="neko.heihei.tech"
private_key_path=$(echo $private_key_path"/bandwagon_vps")
;;
"justvps")
server_hostname="justvps.heihei.tech"
private_key_path=$(echo $private_key_path"/justvps")
;;
"cloudvone")
server_hostname="cloudconevps.heihei.tech"
private_key_path=$(echo $private_key_path"/cloudcone_vps")
;;
*)
echo "Invalid server selection."
exit 1
;;
esac

# -i 选项来指定私钥的路径
# -p 用于指定连接的端口号,默认是22
# 退出连接:输入exit
ssh_command="ssh -p $server_port -i $private_key_path $server_username@$server_hostname"

# 执行SSH连接
$ssh_command