ssh 指令整理

最近常常用到 ssh 這個指令覺得實在是太重要了,因此有必要好好整理一番來好好吸收消化。

透過 ssh 指令執行 remote command line

執行單一指令

1
ssh username@remote_host 'ls -al'

執行多列指令

1
2
3
4
ssh -t username@remote_host << 'ENDSSH'
pwd
ls
ENDSSH

參數 -t 表示 Force pseudo-tty allocation,據參考資料有些指令不佳會出錯。
'ENDSSH'...ENDSSH為執行多列指令的區塊,第一個'ENDSSH'有單引號防止 bash 將之視為變數。

reference

  1. https://stackoverflow.com/questions/216202/why-does-an-ssh-remote-command-get-fewer-environment-variables-then-when-run-man
  2. http://queirozf.com/entries/shell-scripting-examples-ssh

用 ssh 做代理

當跳板來翻牆

1
ssh -vNL bind_address:bind_port:target_address:target_port username@proxy_address

v: Verbose mode. 印出詳細的 debug 訊息
N: 不去執行遠端指令,如此可避免登入跳板
L: 關鍵的轉 port 參數 [bind_address:]bind_port:target_address:target_port
bind_address 不輸入預設就是 localhost

開後門讓外網可連入

首先要在被限制連線的區網 server 上執行以下指令來開後門。

1
$local_server ssh -vNR [proxy_address]:proxy_port:local_address:local_port username@proxy_address

r: 關鍵的參數,與L相反,將 local_address:local_port 往後導回
[proxy_address]:proxy_port

之後再到 proxy server 上執行以下指令就可以透過 proxy 登入到原本連不通的區網 server。

1
$proxy_server ssh local_server@proxy_address -p proxy_port

reference

  1. https://www.ubuntu-tw.org/modules/newbb/viewtopic.php?viewmode=compact&topic_id=17538&forum=7
  2. https://ez3c.tw/2043
  3. https://blog.rex-tsou.com/2017/10/利用-ssh-tunnel-做跳板aka.-翻牆/

ssh 金鑰登入

金鑰生成

1
ssh-keygen

預設會在.ssh 目錄下產生公鑰 id_rsa.pub以及私鑰id_rsa

複製公鑰到欲登入 server

1
ssh-copy-id -i ~/.ssh/id_rsa.pub USER@HOST

-i 為可以指定要使用哪一把公鑰,公鑰會被複製到欲登入 server的 ~/.ssh/authorized_keys 檔案中。

reference

  1. https://blog.gtwang.org/linux/linux-ssh-public-key-authentication/