ssh 连接篇
August 27, 2020 默认分类
SSH 用于登录远程主机,并在远程主机上执行命令,是不安全的 rsh
与 rlogin
的替代品,并且在不安全的网络上提供两台主机之间的安全连接。SSH 不仅用于远程直接执行命令,也提供更丰富的服务,如 sftp,scp。
端口与用户
ssh
不接受 主机:端口
的语法。端口需要使用 -p 端口
指定。
登录用户名需要在命令行中或配置文件中指定。如不指定用户名,ssh
会直接使用当前登录会话用户名进行登录,而不会询问用户。
若要指定用户名,使用 user@host
语法,或 -l 用户名
。
指定地址族
如果一个域名既有 A 记录(IPv4),又有 AAAA 记录(IPv6),ssh 会挑选其中一种进行连接。但是,ssh
似乎没有使用 Happy Eyeball
算法,因此,可能会卡在其中一种连接上,但使用另一个地址族就无此问题。手动指定地址族可以避免这种问题。
-4
:使用 IPv4-6
:使用 IPv6
转发 X11 连接:-X
当转发 X11 连接时,ssh
会自动为你解决一切 X11 的认证与连接问题。成功连接后,远程主机上执行的程序可以通过 ssh 的转发,与本地主机的 X11 服务器进行连接,从而在本地主机绘制图形界面。
使用方法:加上 -X
选项,连接成功后在远程主机的 shell 上执行程序,图形界面会出现在本地主机。
注意:决不要向不信任的远程主机转发 X11 连接。攻击者可以通过这条连接进行恶意活动,例如记录本地主机的键盘活动。
虽然可以使用 X安全拓展,但它可能导致应用程序崩溃,并且不是(发行版中)-X
的默认行为。
转发 ssh agent:-A
将 ssh agent 的连接转发至远程主机。转发后,当远程主机使用 ssh agent 时,使用的实际上是本地主机的 ssh agent。
应用:
- 跳板机
- sudo 认证
注意:仅向信任的远程主机转发 ssh agent 连接。攻击者无法通过此连接获取私钥,但可以获取密钥信息、进行签名。
端口转发
用于在本地主机与远程主机之间转发 TCP 连接与 Unix域套接字(Unix Domain Socket)。
注意:IPv6 地址需要用方括号括起。例:[::1]
动态转发
选项:-D [IP地址:]端口
指定此选项后,SSH 会在指定的端口上监听,作为 SOCKS4,SOCKS5 服务器提供动态转发。
本地转发:将连接向远程主机转发
选项:-L[本地地址]:[远程地址]
地址可以为 IP:端口 ,也可以是 UNIX 域套接字路径。
更具体一点,它可以有以下形式:
[监听地址]:端口:[远程地址]:端口
[监听地址]:端口:远程套接字路径
本地套接字路径:[远程地址]:端口
本地套接字路径:远程套接字路径
用途:将远程主机上的远程地址转发至本地主机上的本地地址。
例:使用本地主机上的 127.0.0.3:5000(这没问题)访问位于远程主机上的 127.0.0.1:8000 管理界面:-L127.0.0.3:5000:127.0.0.1:8000
远程转发:将远程主机的连接向本地转发
选项:-R[远程地址]:[本地地址]
形式与本地转发类似。如果不指定本地地址,则 ssh
将作为 SOCKS 服务器在远程主机上的指定端口上监听,自动打开转发端口。如果将本地地址的端口指定为 0,ssh 会自动分配端口。
跳板机
选项:-J 跳板机地址,...
该选项允许方便而安全地经由跳板机(可以是多个,用英文逗号分隔)连接目标主机。ssh
其它的选项用于目标主机,而非跳板机。若要配置跳板机的连接参数,请修改~/.ssh/config
。
压缩:-C
使用 gzip
的算法压缩传输的所有数据(包含转发的连接、标准输入输出、标准错误)。
注意:与用于 HTTP 与 HTTPS 的压缩不同,SSH 压缩对低速连接很有用,但对高速连接的性能可能无益甚至有害。