SSH 命令的详细使用
SSH - Secure Shell Protocol
SSH OPTION 总览
ssh
最常用的 的连接方式就是 ssh user@ip
端口不指定的话默认是 22 ,或者通过 配置 .ssh/config
进行登录。
常用的
ssh
的 常用参数有下面这些:
1 | 指定连接哪个端口 |
转发相关
和转发相关的有:
1 | 本地某个端口 转发到 远端指定机器的指定端口 |
基本没用过
下面是我目前基本没用过的参数,之后遇到了再补充:
1 | 启用压缩 减少数据传输量 |
SSH -J 跳板机
-J
参数可以让通过 跳板机登录到目标主机:例如 我想登录目标机器 target
但是要连接的 target
我在自己的网络环境中无法访问, 我可以直接访问的是 jump
,如果 jump
可以访问 target
,那么就可以通过下面的命令进行连接:
1 | ssh -J user_A@jump.com[:port] user_B@target.com [-p <Target Port>] |
上面这个命令等效为: ssh jump
然后在 jump
上:ssh target
这个命令也支持 多个跳板:
ssh -J user1@jump1,user2@jump2 user@target
SSH 端口转发
ssh -L/-R <port>:<host addr>:<host port> HOST
后面的参数相当于在 port
前面隐含了 本地的地址。这个命令建立了一个 ssh隧道 来对网络上的流量进行转发(Forwarding)。
这个还没验证过:默认情况下,SSH 端口转发可能只允许来自 SSH 客户端本机的连接,如果想允许外面的 可以在第一个 port 前 加上 0.0.0.0
访问某个端口 就会给某个端口发送 请求 的流量,通过转发 可以把 流量 从一个 port 转发到另一个 port
本地转发 - 访问本地的流量 F 远程
ssh -L
用于把 本地的端口 的流量 转发到 远程主机的端口 可以通过本地的某个端口 访问remote的某个端口(在ssh隧道上),例如: 这个 remote addr 可以是 localhost 也可以是别的 ip (如果某个服务只开在10.10.5.4 ,那么就不用 localhost 而是用 10.10.5.4)
1 | ssh -L 9999:<remote addr>:8888 user@remote_host |
通过这个命令:
- 本地会打开 9999 端口
- 建立转发:
所有发往本地 9999 端口的流量 会通过 ssh 隧道 转发到远程 remote 上的remote addr:9999
- 打开一个shell(如果不像打开shell 可以用 -f 在后台运行,可以使用 -g 允许局域网内的连接)
举个例子:比如我要用 T4 localhost:7860 的服务 我就可以:
1 | ssh -4(指定ipv4) -f -L 7860:localhost:7860 ICCT-T "while true;do sleep 10;done" |
远程转发 - 访问远程的流量 F 本地
ssh -R
用于把 远程端口 的流量 转发到 本地的某个端口上。也就是允许 远程机器访问本地的服务。
1 | ssh -R 6666:<local addr>:22 user@remote_host |
通过这个命令:
- 远程上打开 6666 端口
- 所有发往 远程 6666 的流量都被转发到 本地 的 22
- 打开一个shell
这两个命令 的第一项 隐含了 R的ip 或者 L的ip
配置文件
在 用户目录下 ~/.ssh/config
这是 通过 ssh
访问远程机器时候读取的文件 配置连接远程机器时候的各种参数,可以通过 ssh Host
来代替 ssh
中的长串参数传递。
一般来说 通过 ssh user@hostname -p Port
连接主机 也可以用下面的配置
1 | Host <别名> |