前情提要,第一次來挑戰☺️,前幾天來暖暖身,分享不管公司用什麼工具,都會來跟你要的ssh key!! 如果可以靈活運用ssh tunnel 在家連不上公司內部IP的時候....又有東西要改時,就能派上用場啦~
一般來說,公司會很多的伺服器放不同的軟體服務,舉例A台機器放DB,B台機器專放備份檔案,C台機器才放程式等等,以流程來說,管理者會先要你的ssh key公鑰,加入該伺服器的白名單中,這時你要遠端進入該伺服器就可以直接利用手中的私鑰去對應該台伺服器名單中的公鑰,不用輸入密碼,即可登進去該伺服器中。
ssh-keygen -f ~/.ssh/{檔名} -t rsa -b 4096 -C "{信箱}"
ssh-add ~/.ssh/{檔名}
ssh-add -l
ssh-add -L
cat ~/.ssh/{檔名}.pub
ssh username@xxx.xxx.xxx.xxx
啊不過每次都要打IP 實在很麻煩,可以設定在ssh的config中就不用一直打IP囉!
先進去ssh資料夾中,他是隱藏檔,mac的朋友記得先按"command + shift + .(dot)",會出現淺灰色的資料夾,或是直接用終端機進去,路徑為/Users/{用戶名稱}/.ssh/config
\\ 主機名稱
Host remote_A
\\IP
HostName 172.xx.xx.xxx
\\帳號
User username
\\用哪一把私鑰
IdentityFile ~/.ssh/test_key
此時,你就可以直接用Host名稱來進入遠端主機中~ ssh remote_A
好啦,進入一台機器很簡單,那如果想透過A台機器進去B台機器呢??
情境題,有些機器只有內部IP才能進入,這時就需要先進一台機器是在該網域底下(圖中為A主機),利用A主機跳過去需要內部IP才能進去的機器(圖中的B主機或是C主機),請參考下圖
這裡有三個角色
⭐️要訣是 我的主機出去的port(這邊隨便開一個沒被佔用的port 舉例為port:9999) 對應 圖中B主機開出來的對外port(遠端桌面通常為port:3389) 中間通過A主機的ssh 連線通常為 default port 22(圖中是2233,看管理者如何設定)
ssh {A主機} -p {port} -i {key} -L 9999:xxx.xxx.xxx.123:3389
但每次都打這麼長一串實在不方便...這時候config就派上用場
// 代稱
Host ThroughAToB
// 先去 A主機
HostName xxx.xxx.xxx.170
// A 主機用戶名稱
User clai
// A 主機的通路port
port 2233
// 哪把私鑰
IdentityFile ~/.ssh/key
// port 9999 為本機開的port 用來連接 B機器的入口
// xxx.xxx.xxx.123 為B機器的IP
// :3389 是對應B機器出來的port
LocalForward 9999 xxx.xxx.xxx.123:3389
這時候只要打ssh ThroughAToB
就完成了~
此時終端機是進去A主機喔!!!
?要進入B機器的終端機要打開另外一個終端機,進去本機開的9999(現在已經連線B主機)ssh username@localhost -p 9999
或是透過其他第三方軟體進去喔~
舉例1. remote desktop
舉例2. mongodb
那本機的狀態呢? 去查看本機開出的port 狀態lsof -iTCP:9999
這邊就可以看到
ps. 關機ssh agent 這邊存的key會掉喔,需要重新加入,建議寫在開機排程,ssh-agent是以後使用這個金鑰就不需要再輸入密碼
參考連結:
ssh tunnel