網關伺服器跳轉堡壘主機本地設置

網關伺服器跳轉堡壘主機本地設置

我想使用中間(堡壘、跳躍、網關)伺服器 ssh 到遠端私有主機。這個指令運作正常:

ssh gateway ssh private

透過這個 ~/.ssh/config 設定:

Host gateway
  User gateway-user
  HostName XX.XX.XX.XX
  RequestTTY force

如何在 ~/.ssh/config 中實現此功能?我已經嘗試了 ProxyCommand 的多次迭代,但沒有成功。我想使用位於網關主機上的識別檔案來存取私有主機。我希望能夠做到:

ssh private

我知道這裡描述的技術,但它要求我的公鑰位於所有私人主機上,但我不希望這樣:

http://www.lorrin.org/blog/2014/01/10/one-liner-ssh-via-jump-box-using-proxycommand/

答案1

首先,在網關上設定您的 ssh 金鑰,以便您可以 ssh 到私有。然後在您的客戶端上建立一個單獨的私鑰/公鑰對,用於在網關上進行身份驗證。例如ssh-keygen -t rsa -f id_gateway

然後在網關上,使用command=authorized_keys 檔案中的語法。例如,您的條目可能如下所示:

command="sh -c 'ssh private ${SSH_ORIGINAL_COMMAND:-}'" ssh-rsa AAAAB3....

搜尋 sshd 線上說明頁以command="command"取得更多資訊。請務必將 id_gateway.pub 金鑰新增至此行。然後在.ssh/config您的客戶端中新增以下條目:

Host private
User gateway-user
Hostname xxx.xxx.xxx.xxx
IdentitiesOnly Yes
IdentityFile ~/.ssh/id_gateway

現在,您應該能夠從您的客戶端ssh private直接進入。scpsftp

額外學分

如果您想將其用於多台伺服器,但只想管理網關上的公鑰,則可以使用以下技巧。sshd預設只允許從本地環境接收某些變數。其中之一是LC_PAPER很少用於任何用途。因此我們可以使用它來傳遞伺服器的主機名,如下所示:

首先,將公鑰條目更改為

command="sh -c 'ssh $LC_PAPER ${SSH_ORIGINAL_COMMAND:-}'" ssh-rsa AAAAB3...

然後在您的客戶端上,向您的文件(或您使用的任何 shell)添加一個函數,.bashrc如下所示:

ssh_proxy() {
  LC_PAPER=$1 /usr/bin/ssh $*
}

如果需要的話,可以建立一個別名:

alias ssh=ssh_proxy

最後,將Host部分新增至您的.ssh/config部分,如上所示。例如:

Host private2
User gateway-user
Hostname xxx.xxx.xxx.xxx
IdentitiesOnly Yes
IdentityFile ~/.ssh/id_gateway

現在您應該能夠僅使用網關上的一個公鑰來完成ssh private此操作。ssh private2

相關內容