使用SSH從公網伺服器簡易使用內網任意機器服務,比如從外部下載程式碼

戴维德善业福發表於2024-04-24

如果有一個臺外部的機器waibu-host, 位於阿里雲, 騰訊雲, 亞馬遜, azure雲等等;

假設你想從這個waibu-host上訪問公司任意服務,下載程式碼, 訪問http服務,等等, 或者你機器上的服務, 不需要額外工具, 只要ssh 反向就可以實現;

借個圖, 如下:

舉個例子, 如果你想從公司內部透過git ssh下載gitlab程式碼, 該怎麼做呢?

假設內部的gitlab ssh下載地址為 gitlab.inner.com:2222

第一步: 內部你的公司機器上執行ssh 反向代理, 建立隧道;

這條命令會在你的機器上起一個代理, waibu-host上起一個監聽埠2222

ssh -i ./ssh-key.pem   -ngfNT -R 2222:gitlab.inner.com:2222 user@waibu-host

命令執行完畢, 在waibu-host上可以看到2222埠監聽, 訪問2222就可以透過你的機器(建議用linux) 代理到內部的 gitlab上;

第二步: 在waibu-host對ssh再做一點配置, 如下, 讓下載程式碼的解析到本地, 並且增加使用者和key配置

# cat ~/.ssh/config 
Host gitlab.inner.com
   HostName 127.0.0.1
   User git
   IdentityFile ~/.ssh/id_rsa
   Port 2222

第三步: 在公司內部的gitlab上你的賬戶下, 增加ssh key憑證; 將waibu-host上的公鑰增加到你的賬戶下.

如果已有秘鑰, 忽略這一步;

如果沒有想生成秘鑰, 可如下操作

# ssh-keygen -t rsa -b 1024
#連續回車, 這樣在~/.ssh/下就產生了 id_rsa id_rsa.pub秘鑰, 在公司內部gitlab上增加 id_rsa.pub秘鑰

第四步: 在waibu-host驗證 ssh 到gitlab是不是成功了; 如果看到下面的輸出, 就是成功了; 如果沒有, 回頭檢查一下

# ssh -T -p 2222 gitlab.inner.com -l git
Welcome to GitLab, @user!

第五步: 在waibu-hos愉快的下載程式碼, 例如下面; 這樣, 即使你的程式碼中還巢狀了內部的gitlab地址, 仍然可以愉快的使用

git clone ssh://gitlab.inner.com:2222/project/modules... 

相關文章