ssh 指令整理
最近常常用到 ssh 這個指令覺得實在是太重要了,因此有必要好好整理一番來好好吸收消化。
透過 ssh 指令執行 remote command line
執行單一指令
1 | ssh username@remote_host 'ls -al' |
執行多列指令
1 | ssh -t username@remote_host << 'ENDSSH' |
參數 -t
表示 Force pseudo-tty allocation,據參考資料有些指令不佳會出錯。'ENDSSH'...ENDSSH
為執行多列指令的區塊,第一個'ENDSSH'
有單引號防止 bash 將之視為變數。
reference
- https://stackoverflow.com/questions/216202/why-does-an-ssh-remote-command-get-fewer-environment-variables-then-when-run-man
- 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
- https://www.ubuntu-tw.org/modules/newbb/viewtopic.php?viewmode=compact&topic_id=17538&forum=7
- https://ez3c.tw/2043
- 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
檔案中。