1.命令作用
OpenSSH SSH客户端(远程登录程序) (OpenSSH SSH client (remote login program));可是用于远程登录、数据传输、命令执行等安全协议操作
2.命令语法
Usage: ssh [OPTION] [user@]hostname [command]
3.参数详解
OPTION:
- -1 | -2,强制ssh只尝试协议版本1或者2,Centos 7.6是2版本,指定1会提示版本不对应信息
- -4 | -6,强制ssh只使用IPv4 | IPv6地址,默认是使用IPv4地址
- -A,启用身份验证代理连接的转发(可能有安全问题)
- -a,禁用身份验证代理连接的转发
- -b bind_address,在本地机器上使用bind_address作为连接的源地址;仅对具有多个地址的系统有用
- -C,请求压缩所有数据(包括stdin、stdout、stderr、转发TCP和unix域连接),减少传输时间;压缩算法为gzip,常用于有网络限制的场景;默认值可以在配置文件(~/.ssh/config)中逐个主机设置
- -c cipher_spec,选择用于加密会话的密码规范
- 协议版本1支持值: 3des,blowfish,des(不能指定多个值)
- 协议版本2支持值: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc(可指定多个值,以逗号分隔)
- -D [bind_address:]port,指定本地“动态”应用级端口转发。这是通过分配一个套接字来监听本地端的端口来实现的,可选地绑定到指定的bind_address。每当连接到该端口时,该连接将通过安全通道转发,然后使用应用程序协议确定从远程计算机连接到何处。目前支持SOCKS4和SOCKS5协议,ssh将充当SOCKS服务器。只有root用户可以转发特权端口。动态端口转发也可以在配置文件中指定
- -E log_file,将调试日志(-v参数)附加到log_file而不是标准错误
- -e escape_char,为带有pty的会话设置转义字符,可取值'~'(默认值)、'none'等
- -F configfile,指定可选的每个用户配置文件;如果指定配置文件,则系统范围的配置文件(/etc/ssh/ssh_config)将被忽略。每个用户的默认配置文件是~/.ssh/config
- -f,请求ssh在命令执行之前进入后台;如果ssh要求输入密码或口令,但用户希望在后台输入,那么这是很有用的;这隐含了-n 选项,在远程站点启动 X11 程序的推荐方式是使用类似ssh -f host xterm/command的命令
- -G,使ssh在解析完Host和Match配置块后打印最终配置并退出
- -g,允许远程主机连接到本地转发端口;如果在多路连接上使用,则必须在主进程上指定此选项
- -i identity_file,选择一个文件,从中读取用于公钥身份验证的标识(私钥);协议1版本默认值为~/.ssh/identity,协议2版本默认值为~/.ssh/id_dsa, ~/.ssh/id_ecdsa, ~/.ssh/id_ed25519 and ~/.ssh/id_rsa;默认值可以在配置文件(~/.ssh/config)中逐个主机设置
- -J [user@]host[:port],通过首先与跳转主机建立ssh连接,然后从跳转主机建立到最终目的地的TCP转发,从而连接到目标主机。多个跳转跳转可以用逗号分隔。这是指定ProxyJump配置指令的快捷方式
- -K,启用基于GSSAPI的身份验证,并将GSSAPI凭据转发(委托)到服务器
- -k,禁用向服务器转发(委托)GSSAPI凭据
- -L,规定将本地(客户端)主机上给定的 TCP 端口或 Unix 套接字的连接转发到远程端的指定主机和端口或 Unix 套接字
- -l login_name,指定要在远程计算机上登录的用户,与user@ipaddr效果一致;默认值可以在配置文件(~/.ssh/config)中逐个主机设置;优先级user@ipaddr > -l > ~/.ssh/config
- -M,将ssh客户端置于连接共享的“主”模式。多个-M选项将ssh置于“主”模式,在接受从属连接之前需要进行确认
- -m mac_spec,以逗号分隔的MAC(消息验证码)算法列表,按优先顺序指定
- -N,禁止执行远程命令,这对于仅转发端口很有用;-T的参数下禁止执行命令
- -n,将stdin(标准输入)重定向到/dev/null(阻止从stdin读取输入);当ssh在后台运行(-f)时,必须使用该参数,可使用它在远程机器上运行X11程序
- -O ctl_cmd,控制一个活动连接多路复用主进程。当指定-O选项时,ctl_cmd参数将被解释并传递给主进程。有效的命令有:
- check,检查主进程是否正在运行
- forward,请求转发而不执行命令
- cancel,取消转发
- exit,请求主进程退出
- stop,请求主进程停止接受进一步的多路复用请求
- -o option,可用于命令行指定配置文件(~/.ssh/config)中使用的选项,优先级高于配置文件
- -p port,指定要在远程主机上连接的端口,默认值可以在配置文件(~/.ssh/config)中逐个主机设置
- -Q query_option,查询ssh协议中指定版本2支持的算法。可用的特性有:
- cipher,支持对称密码
- cipher-auth,支持支持身份验证加密的对称密码
- mac,支持消息完整性码
- kex,密钥交换算法
- key,密钥类型
- key-cert,证书密钥类型
- key-plain,非证书密钥类型
- protocol-version,支持SSH协议版本
- -q,安静模式;会导致大多数警告和诊断消息被抑制
- -R,规定将远程(服务器)主机上给定的 TCP 端口或 Unix 套接字的连接转发至本地的指定主机和端口或 Unix 套接字
- -S ctl_path,指定用于连接共享的控制套接字的位置,或者使用字符串“none”来禁用连接共享
- -s,可用于请求调用远程系统上的子系统。子系统有助于使用SSH作为其他应用程序的安全传输(例如sftp(1))。子系统被指定为远程命令。
- -T,禁止分配伪终端;直接连接,不启动远程shell,可执行命令(别名的命令不能执行)
- -t,强制分配伪终端;这可以用于在远程机器上执行任意基于屏幕的命令或程序
- -V,显示版本号并退出
- -v,详细的模式,打印ssh进度的调试消息,可用于调试连接、身份验证和问题定位;可指定多个-v选项,最多可指定三个(-vvv)
- -W host:port,请求将客户机上的标准输入和输出通过安全通道转发到端口上的主机。暗示了-N、-T、ExitOnForwardFailure和clearallforwarding,尽管这些可以在配置文件中覆盖或使用-o命令行选项
- -w local_tun[:remote_tun],请求在客户端(local_tun)和服务器(remote_tun)之间使用指定的tun(4)设备转发隧道设备。
- -X,启用X11转发,默认值可以在配置文件(~/.ssh/config)中逐个主机设置(可能存在安全问题)
- -x,禁用X11转发
- -Y,启用可信X11转发;受信任的X11转发不受X11 SECURITY扩展控制
- -y,通过syslog(3)系统模块发送日志信息。默认情况下此信息被发送到stderr
4.常用用例
4.1.指定IP/主机名或用户名
ssh 192.168.118.191 # 仅指定IP地址,ssh的用户默认是当前执行命令的用户名(如root用户执行,即ssh到该IP地址的root用户)
ssh node2 # 仅指定主机名,默认是当前执行命令的用户名(需要hosts文件设置主机名与IP映射关系)
ssh user1@192.168.118.191 # 指定用户名和IP地址
ssh user1@node2 # 指定用户名和IP地址(需要hosts文件设置主机名与IP映射关系)
ssh -l user1 192.168.118.191 # 使用-l指定用户与user1@效果相同
4.2.指定端口
ssh -p 2211 user1@192.168.118.191 # 默认端口是22,如系统ssh端口不是22,需要手动指定,具体端口可在/etc/ssh/sshd_config文件中查看,或者netstat -tulnp | grep sshd查看
4.3.压缩传输
ssh -C 192.168.118.191
4.4.指定证书
ssh -i id_rsa user1@192.168.118.191 # 指定远程主机的私钥登录(无互信情况下也不需要密码),远程主机要生成私钥、公钥、authorized_keys(其内包括远程主机的公钥)
4.5.显示详细信息(调试使用)
ssh -v 192.168.118.191 # 显示ssh详细登录信息,用于调试或方便排查登录过程中的卡顿、异常等
4.6.远程执行命令
ssh user1@192.168.118.191 hostname # 连接远程主机执行命令后退出
ssh user1@192.168.118.191 "hostname; ls -l" # 连接远程主机执行多个命令后退出
ssh -T user1@192.168.118.191 hostname # 不分配终端远程主机执行命令后退出(无终端干扰,常用于远程执行非交互式命令)
ssh -q -o stricthostkeychecking=no -T $user@$server "systemctl status firewalld"
# -q,安静模式
# stricthostkeychecking=no,默认值为ask,即第一次需要用户输入y确认公钥,设置no自动接受任何公钥,将结果赋值时避免多余输出
# -T,不分配交互式终端
sshpass -p $ServersRootPasswords ssh -q -o stricthostkeychecking=no -T root@$server "openssl passwd -salt lzlzlzl -1 $password"
# sshpass 可以给ssh提供输入密码,但是需要执行yum install sshpass -y安装sshpass命令
4.7.禁止远程执行命令
[root@node1 opt]# ssh -N qwer@192.168.118.191 "hostname; ls -l"
qwer@192.168.118.191's password: # 输入密码
^CKilled by signal 2. # 该处ctrl+c退出
[root@node1 opt]#
4.8.查看ssh配置参数值
[root@node2 ~]# ssh -G -F config 192.168.118.201 | head
user user1
hostname node1
port 22
addressfamily any
batchmode no
canonicalizefallbacklocal yes
canonicalizehostname false
challengeresponseauthentication yes
checkhostip yes
compression no
[root@node2 ~]#
4.9.设置ssh配置文件
[root@node2 ~]# cat ~/.ssh/config
Host 192.168.118.201
HostName node1
User user1
Port 22
[root@node2 ~]# ssh 192.168.118.201 # 默认会读取用户下的~/.ssh/config文件,命令行没有指定用户,但配置文件里面设置了用户
user1@node1's password:
Last login: Sun Jul 13 00:58:52 2025 from 192.168.118.191
[qwer@node1 ~]$ exit
logout
Connection to node1 closed.
[root@node2 ~]# > ~/.ssh/config
[root@node2 ~]# cat ~/.ssh/config # 默认配置文件~/.ssh/config为空
[root@node2 ~]# cat config # 设置一个其他文件config
Host 192.168.118.201
HostName node1
User qwer
Port 22
[root@node2 ~]# ssh -F config 192.168.118.201 # -F指定配置文件同样可以;其配置文件格式及其他参数参考/etc/ssh/ssh_config文件
qwer@node1's password:
Last login: Sun Jul 13 00:59:14 2025 from 192.168.118.191
[qwer@node1 ~]$
4.10.命令行指定参数
[root@node1 opt]# ssh -o User=qwer -o Port=22 192.168.118.191 # 命令行使用-o指定配置文件里面的参数,可以指定多个
qwer@192.168.118.191's password:
Last login: Sat Jul 12 17:36:46 2025 from node1
[qwer@node2 ~]$
4.11.X11协议转发
[root@node1 ~]# ssh 192.168.118.191 xclock
root@192.168.118.191's password:
Error: Can't open display: # 没有-X启用X11转发,执行报错
[root@node1 ~]#
[root@node1 ~]# ssh -X 192.168.118.191 xclock
root@192.168.118.191's password:
Warning: Missing charsets in String to FontSet conversion # -X启动X11转发,执行到该处会弹出时钟界面;然后ctrl+c或者关闭时钟界面退出
[root@node1 ~]#
[root@node1 ~]# ssh -Y 192.168.118.191 xclock
root@192.168.118.191's password:
Warning: Missing charsets in String to FontSet conversion # -Y启动可信X11转发,执行到该处会弹出时钟界面;然后ctrl+c或者关闭时钟界面退出
[root@node1 ~]#
[root@node1 ~]# ssh 192.168.118.191
root@192.168.118.191's password:
Last login: Sat Jul 12 15:03:47 2025 from 192.168.118.201
[root@node2 ~]# xclock
Error: Can't open display: # ssh到node2没有-X启用X11转发,执行报错
[root@node2 ~]# exit
logout
Connection to 192.168.118.191 closed.
[root@node1 ~]#
[root@node1 ~]# ssh -Y 192.168.118.191
root@192.168.118.191's password:
Last login: Sat Jul 12 15:04:07 2025 from 192.168.118.201
[root@node2 ~]# xclock
Warning: Missing charsets in String to FontSet conversion # ssh到node2启动可信X11转发,执行到该处会弹出时钟界面;然后ctrl+c或者关闭时钟界面退出
[root@node2 ~]#
==================================================================================
[root@node1 ~]# ssh -f -X 192.168.118.191 xclock # 指定-f后不需要ctrl+c退出,弹出时钟后放入后台执行,命令行回车后可执行其他操作(时钟界面也不会退出)
root@192.168.118.191's password:
[root@node1 ~]# Warning: Missing charsets in String to FontSet conversion
[root@node1 ~]#
4.12.将调试输出到日志文件
[root@node1 opt]# ssh -E debug.log -v 192.168.118.191 # -v调试内容输入到-E指定的文件中,默认输入到屏幕(可与ssh -v 192.168.118.191对比一下效果)
root@192.168.118.191's password:
Last login: Sat Jul 12 17:25:50 2025 from node1
[root@node2 ~]#
[root@node2 ~]# exit
logout
Connection to 192.168.118.191 closed.
[root@node1 opt]# tail debug.log
debug1: pledge: network
debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
debug1: Sending environment.
debug1: Sending env LANG = en_US.UTF-8
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: client_input_channel_req: channel 0 rtype eow@openssh.com reply 0
debug1: channel 0: free: client-session, nchannels 1
Transferred: sent 2340, received 2656 bytes, in 19.4 seconds
Bytes per second: sent 120.4, received 136.6
debug1: Exit status 0
[root@node1 opt]#
461

被折叠的 条评论
为什么被折叠?



