前言
SSH是Secure Shell protocal的缩写,它是一种网络协议,用于计算机之间的加密登录。SSH命令也是一个非常常用且有用的命令,一般会用于远程登录。
最简单的,如果你想以用户名root登录远程主机host,只需要执行如下命令中的任意一条,第一条是常用的。
1 | ssh root@host |
SSH有很多用法,可以进行远程操作,绑定本地端口,本地端口转发,远程端口转发等。这里我主要记录一下之前用到的本地端口转发与远程端口转发。
本地端口转发
有时候可能无法通过SSH命令直接连接到目标主机,这时候需要通过中间的转跳机来实现数据的传送,这时候就需要用SSH来实现本地端口转发的功能。也称为local forwarding。假定host1是本地主机,我们想要连接host2这个远程主机,但是两者并不能直接连通,但是host3能同时连通host1和host2,这时候我们只要将host3主机当做跳板即可。一般命令可以这么写
1 | ssh -L 1234:host2:22 root@host3 |
这时候在本地通过1234端口即可访问host2主机。
1 | ssh -p 1234 root@localhost |
-L表示本地转发,1234:host2:22分别表示本地端口:目标主机:目标主机端口,host3就是转跳机。这样访问host上的1234端口就相当于访问host2的22端口了。该命令实现的功能是,ssh绑定本地端口1234(创建socket并监听),然后将所有该端口监听到的数据通过host3进行转发到host2相应的端口,这样访问host1上的1234端口就等于访问host2的22端口。本地端口转发使得host1与host2之间仿佛形成了一个数据传输的秘密隧道,因此又称为ssh隧道。
若不想登录到转跳机中,只想打通隧道,命令需要多加两个参数
1 | ssh -f -N -L 1234:host2:22 root@host3 |
-f表示后台认证用户/密码,通常和-N连用,不用登录到远程主机。
也可以通过本地的1234端口访问到host2的22端口。
1 | ssh -p 1234 root@localhost |
远程端口转发
远程端口转发是指绑定远程端口的转发。接着考虑上面的例子。在本地端口转发的时候,连接的路径其实是host1—>host3—>host2,万一当host1无法连接到host3,但是host3却能够连接host1的时候,这时候就需要考虑远程端口转发。我们在host3上建立与host1的ssh连接,再通过host1使用这条连接即可。一般命令可以这么写,首先在host3上执行如下的命令
1 | ssh -R 1234:host2:22 root@host1 |
其中1234:host2:22分别代表远程主机端口:目标主机:目标主机端口,这样host1就能监控它自己的1234端口了。因为对于host3来说,host1是远程主机,所以这种方法称为远程端口转发。
与前面的例子类似的,也能加上-f -N的参数。
1 | ssh -f -N -R 1234:host2:22 root@host1 |
更新 2019年11月19日
ssh命令完善
1、端口
SSH默认使用的端口号是22,大多Linux系统的22端口都是开放的,像是之前直接访问没有加端口号的情况就是默认访问22端口,如果不想通过22端口进行访问,我们就可以用-p参数来指定端口号。
1 | 通过1234端口进行访问 |
2、打开调试模式
在ssh命令中添加上-v就行了
1 | ssh -v root@10.1.13.111 |
会在窗口中打出连接的过程

3、挂载远程文件系统
另外一个很赞的基于 SSH 的工具叫 sshfs。 sshfs 可以让你在本地直接挂载远程主机的文件系统。它的使用格式如下:
1 | sshfs -o idmap=user user@hostname:/home/user ~/Remote |
比如
1 | sshfs -o idmap=user pi@192.168.0.116:/home/pi ~/Pi |
这个命令可以将远程主机 pi 用户的主目录挂载到本地主目录下的 Pi 文件夹。