登录到远程主机:
# ssh user@192.168.1.120
远程主机执行命令:
# ssh user@192.168.1.120 'ifconfig'
本地文件内容写到远程主机文件:
# ssh user@192.168.1.120 'cat >> file' < /etc/passwd
SSH 还提供了一个非常有用的功能,就是端口转发,能帮你解决一些无法建立的连接。
1)本地端口转发
应用场景 1:A 不能访问 C,B 能访问 A 和 C,实现通过 B 能让 A 访问 C
在主机 A 执行:
# ssh -L 2222:主机 C:22 主机 B # ssh -L [绑定地址:]本地端口:主机 C:C 端口 主机 B
将 SSH 绑定本地端口 2222,本地 2222 端口数据转发主机 B,主机 B 的所有数据转发到主机 C 的 22 端
口;这样一来,只要在主机 A ssh -p 2222 localhost,就等于连上了主机 C 的 22 端口。
应用场景 2:一台 Squid 代理服务器,限制了本机可以清理缓存,但是我想从远程服务器清理
在远程服务器执行:
# ssh -L 31280:localhost:3128 SquidHost
在远程服务器上执行清理命令到本机 31280 端口,31280 收到的数据加密转发到 SquidHost 的 SSH
Server 上,SSH Client 解密收到的数据并转发到监听的 3128 端口上,最后将 Squid 返回的数据原路
返回。
2)远程端口转发
应用场景 1:A 不能访问 C,B 能访问 A 和 C,但 A 不能访问 B,比如 A 在外网,B 在内网
在主机 B 执行:
# ssh -R 2222:主机 C:22 主机 A
将 SSH 绑定本机 2222 端口,与主机 A 建立 SSH 通道,当主机 A 访问本地 2222 端口,就等于访问主机
B 的 2222 端口,主机 B 的 2222 端口把数据转发到主机 C 的 22 端口。
应用常见 2:公司有一台内网服务器,还有一台云主机不能 SSH 直接连接这台公司内网服务器,但内
网服务器可以 SSH 连接云主机
在公司内网服务器执行:
# ssh -R 2222:localhost:22 云主机
将云主机上的 2222 端口数据转发到内网服务器 SSH Client 上,SSH Client 解密收到的数据并转发
到监听的 22 端口上,最后再将返回的数据原路返回。
3)动态端口转发(不限定端口,全权代理)
应用场景:翻墙访问国外网站
如果是 MAC 系统直接在终端执行:ssh -D 2222 国外云主机
如果是 Windows 系统可借助 putty 工具实现,在 putty 里面端口转发->本地端口转发属性里面添加
一个本地端口,并勾选 SOCKS4/5 动态转发,连接即可。
将 SSH 绑定本机 8080 端口,SSH 就会创建一个 SOCKS 代理服务,直接在浏览器上设置代理本机
127.0.0.1 的 8080 端口即可,当浏览器访问国外网站时,本地代理把请求转发到国外云主机的 SSH
Server,SSH 解密并转发给指定的网站。
注意:再 Linux 终端执行 ssh 绑定命令后,默认会进入一个新的 shell,只要这个 shell 不退出,此
端口转发就一直有效。如果要想放到后台执行就加-Nf 两个选项,-N 是不执行命令,-f 后台执行,
这样就转入后台运行,就可以在本地 shell 执行操作了,如果想关闭后台就 kill 这个进程