複数のホスト経由のssh


37

私のオフィスにあるマシンにアクセスするには、現時点でこれを実行しています:

me@home:~$ ssh unix.university.com
me@unix:~$ ssh unix.department.univeristy.com
me@unix.department:~$ ssh office-machine.department.university.com
me@office-machine:~$ echo "This is very annoying"

このプロセスを自動化する簡単な方法、おそらく最後に使用できる単一のコマンドはありますか?


回答:


31

sshクライアントを使用して、ログイン時にリモートマシンでsshを実行できます。

ssh -t unix.university.com \
    ssh -t unix.department.univeristy.com \
    ssh -t office-machine.department.university.com

-t呼び出しに含める理由は、sshからエラーが返されたためです:自分のマシンで試してみたときにstdinが端末ではないため、マシンが異なる場合があります。)

最後のシェルを終了すると、プロセスは連鎖的に終了し、何度も入力Ctrl-Dする必要がなくなります。


注意:リモートマシンでログインする場合にのみ「-t」を追加してください。リモートマシンでコマンドを開始するには、それらをいくつかの物を破損する可能性がある/破損させるので置かないでください(例: tar cf - something | ssh somewhere "cd /path/remote ; tar xf - " 追加すると破損する可能性があります-t!素晴らしいステファンチャザラスの回答unix.stackexchange.com/questions/151916/ …
オリビエデュラック

3
-Jを使用すると、すべてのsshキーをローカルコンピューターに保存できるため、この回答よりも安全です。-Jオプションは、@ Miikka
ErikSjölund

1
@ErikSjölundopensshでは、複数の-Jオプションを使用できません。ProxyCommandあなたの設定で複数のオプションを使用してそれを行うことができると思います。
amphetamachine

1
@amphetamachineでは-J、通過するホップのコンマ区切りリストを指定できます。ただし、サポートするのに古すぎるバージョンを使用している場合は、この回答よりもProxyCommandwith を使用する-W方がはるかに優れたアプローチです-J
カスペルド

35

はい、ssh ProxyCommandとnetcatを使用してそれを行う素晴らしい方法があります

このようなものを.ssh / configに入れてください

Host *.department.university.com
User me
ForwardAgent yes
ProxyCommand ssh unix.university.com nc %h %p

これは、ジャンプ/バスションホストunix.university.comを使用して.department.university.comサーバーに直接ログインします。unix.university.comのスタンザが直接必要な場合もあります。

仕組みを説明するリンクは次のとおりです。http//backdrift.org/transparent-proxy-with-ssh

この手法を使用すると、次のように記述できます。

ssh unix.department.university.com

すべて直接表示されます。rsync、scpなどのツール(sshスタック内のすべてのもの)も透過的に機能します。


2
+1これに似たものを使用して、テストネットワークからステージングサーバーを介してprodネットワークにデータをプッシュします。
アルケージュ

2
うん、これはうまくいく!
ガベ。

15
記録的な新しいバージョンのsshが-Wオプションをサポートするために、ProxyCommand ssh -W %h:%p gatewayncに依存する代わりに次のようなことを行うことができます
Ulrich Dangel

知っておきたい!Thx
アーロンブラウン

2
ユーザーの名前がマシン間で同じである場合、うまく機能します。異なる場合は、次のような操作を行う必要がありますProxyCommand ssh -W %h:%p user@gateway
リカルドコッス

9

OpenSSH 7.3では、ssh はこの問題を正確に解決するために-Jコマンドラインフラグと対応するProxyJump構成オプションを追加しました。

にSSHで送信するホストをカンマ区切りリストとしてに渡します-J。例えば:

ssh -J unix.university.com,unix.department.university.com  \
  office-machine.department.university.com

-5

SSHトンネリング。正確にこれを行う方法を覚えていませんが、基本的には別のポートに接続することで基本的にマシンにトンネルを許可する方法があることを知っています。そうすれば、同じ初期マシン(たとえば、異なるポート)にシェルするだけで、最終的な場所を見つけることができます。

ただし、設定方法を調べる必要があります。

:)


港や大学のsshゲートウェイを開きたくない(そしておそらくできない)…
ステファンギ

9
方法がわからず、調べるのが面倒な場合、なぜこの回答を投稿したのですか?
amphetamachine

4
そうでもない答え
ゲイブ。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.