中間サーバー (要塞、ジャンプ、ゲートウェイ) を使用してリモート プライベート ホストに SSH 接続したいです。次のコマンドは正常に動作します:
ssh gateway ssh private
この ~/.ssh/config 設定では:
Host gateway
User gateway-user
HostName XX.XX.XX.XX
RequestTTY force
これを ~/.ssh/config に実装するにはどうすればよいでしょうか? ProxyCommand を何度も試してみましたが、うまくいきませんでした。ゲートウェイ ホストにある ID ファイルを使用してプライベート ホストにアクセスしたいと考えています。次の操作を実行できるようにしたいです。
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
直接アクセスできるようになります。これは および でも機能しscp
ますsftp
。
追加クレジット
これを複数のサーバーで使用したいが、ゲートウェイでは 1 つの公開キーのみを管理したい場合は、次のトリックを使用できます。sshd
デフォルトでは、ローカル環境から特定の変数のみを受信できます。これらの 1 つは、LC_PAPER
ほとんど使用されない です。したがって、次のようにしてサーバーのホスト名を渡すために使用できます。
まず、公開鍵のエントリを次のように変更します。
command="sh -c 'ssh $LC_PAPER ${SSH_ORIGINAL_COMMAND:-}'" ssh-rsa AAAAB3...
次に、クライアントで、.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
これで、ゲートウェイ上の 1 つの公開キーだけでssh private
実行できるようになります。ssh private2