2013
Aug
17

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

当我连线到 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

透过 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 [email protected] "ssh [email protected]"

这个指令有点太长,每次都打这么长是有点累,这时我们可以把设定写进 ~/.ssh/config 这个档案之中,以后只要输入 ssh dev 就可以直接连到 C 机器。

SSH config
  1. Host dev
  2. HostName 192.168.0.2
  3. user admin
  4. 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 的密码,再来就执行以下指令。


回應 (Leave a comment)