SSH 是 Linux 系统中,一项非常重要的技术,它可以完成很多你异想不到的工作,请看以下的介绍。
SSH 相关参数
- -N 不执行 ssh command , 加了这个参数后,画面就不会进入 tty(Terminal) 模式, tty 模式是指 user 登入 SSH server 后,还能手动输入 linux 指令。
若我们没有进入 tty, 画面就会卡在程式执行中的状态,如此只要按 ctrl +c 就可以执行中断 SSH 连线 , 另外也可以用来 debug,看 SSH 连线的 Log。
通常我们使用 tunnel 时,不需要执行任何指令,所以都会加上 -N 。
- -f 背景执行。
- -v , -vv, -vvv : 显示 Log, 一个 v 代表显示一层 Log (level1) ,两个 V 就会显示 level1 + level2 ,最多是三个 v 。
- -L: Local Port Forwarding. 本地机器连到远端机器。
- -R: Remote Port Forwarding. 远端机器连回本地机器。
- -D: Dynamic Port Forwarding. 建立 SOCKS4 or SOCKS5 protocol 的 Socks Server。
Local Port forwarding
- ssh -L 8080:puritys.me:80 admin@puritys.me
当我连线到 local 8080 Port , Linux 会自动导到 puritys.me ,并连线至 puritys.me 80 Port
Remote Port Forwarding
- ssh -N -R 8080:localhost:8888 puritys.me
在 localhost 建立一个 Remote SSH Tunnel ,与 puritys.me 建立一个连线,当 puritys.me 的机器中,有程式连线到 puritys.me 8080 Port ,这时就会进入 ssh tunnel,而自动导到 localhost 并连线至 localhost 8888 Port
Local Tunnel 可以使 Request 从 Local Machine 连线 Remote Machine ,而 remote tunnel 则可以使 Request 从 Remote Machine 连至 Local Machine。
Dynamic Port Forwarding
- ssh -D 127.0.0.1:1080 admin@puritys.me
透过 local 1080 Port 所有的 Request 都会透过 puritys.me 这台机器连线出去,类似 Proxy 的功能。
Socks Proxy
如何让 Browser 透过不同的 IP 读取网页呢?
一般来说有 HTTP, HTTPS , Socks 这几种方式,首先用上一步的方式,在电脑 A 中建立 Dynamic Tunnel,接著在另一台电脑 B 的 browser 设定中,开启 proxy ,并设定 Socks HOST 为电脑 A IP ,再输入 Port 为 1080,这样就完成了 Socks Proxy 连线的设定。
SSH onetime Proxy
如何一次性的从 A 机器,透过 B 机器(192.168.0.1),连到 C 机器(192.168.0.2)。
ssh -t -p 22 admin@192.168.0.1 "ssh admin@192.168.0.2"
这个指令有点太长,每次都打这么长是有点累,这时我们可以把设定写进 ~/.ssh/config 这个档案之中,以后只要输入 ssh dev 就可以直接连到 C 机器。
- Host dev
- HostName 192.168.0.2
- user admin
- ProxyCommand ssh 192.168.0.1 nc %h 22
在 Cygwin 上建立 SSH Tunnel
Cygwin 是一个能让 Windows 执行 Linux 相关功能的软体,详情可以参考这篇文章: Cygwin 。
安装 SSH Daemon
打开 Cygwin 前,必须先记得用 Administrator 的权限启动 Cygwin terminal ,然后在 Terminal 里执行下列两个指令来安装与启重 SSH Daemon。
- ssh-host-config -y (安装 SSH daemon)
- cygrunsrv -S sshd (启动 SSHD)
启动 sshd 时,如果有遇到错误讯息,可以看一下 /var/log/sshd.log 里面的讯息,另外记得手动修改两个资料夹的权限。
- tail -n 300 /var/log/sshd.log
- chmod 400 /etc/ssh*key
- chmod 600 /var/empty
建立 Dynamic tunnel
建立 ssh 连线会需要输入帐号密码,所以必需先设定 Administrator 的密码,再来就执行以下指令。
- ssh -vvvND 192.168.xx.xx:1080 Administrator@192.168.xx.xx