複数のホストを介したSSH

複数のホストを介したSSH

私のオフィスのコンピュータにアクセスするには、現在次のことを行っています。

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

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

答え1

はい、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

ログイン後、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入力する時間が節約されます。

答え3

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

SSHを介して接続するホストをカンマ区切りリストとして提供します-J。たとえば、

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

答え4

同じユーザー名を使用してサーバーAからサーバーBにssh

Host target
  HostName <serverB_hostname>
  ForwardX11Trusted yes
  LogLevel verbose
  User <username>
  ProxyCommand ssh <username>@<serverA_hostname> -W %h:%p

関連情報