回答:
デフォルトでは、sshを使用してリモートマシンでコマンドを実行すると、TTYはリモートセッションに割り当てられません。これにより、TTYの癖を扱うことなく、バイナリデータなどを転送できます。これは、で実行されるコマンド用に提供される環境computerone
です。
ただし、リモートコマンドなしでsshを実行すると、シェルセッションを実行している可能性が高いため、TTYが割り当てられます。これはssh otheruser@computertwo.com
コマンドで予期されていますが、前述の説明のため、そのコマンドで使用できるTTYはありません。
上のシェルが必要な場合computertwo
は、代わりにこれを使用します。これにより、リモート実行中にTTY割り当てが強制されます。
ssh -t user@computerone.com 'ssh otheruser@computertwo.com'
これは通常、最終的にsshチェーンの最後にシェルまたは他の対話型プロセスを実行する場合に適しています。データを転送する場合、を追加することは適切でも必須でもありません-t
が、すべてのsshコマンドには、次のようなデータ生成コマンドまたは-消費コマンドが含まれます。
ssh user@computerone.com 'ssh otheruser@computertwo.com "cat /boot/vmlinuz"'
SSHをリレーとして使用するより良い方法がありProxyCommand
ます:オプションを使用します。クライアントマシンには、2台目のコンピューターにログインできるキーが必要です(ほとんどの場合、公開キーはSSHを使用する方法として推奨されます)。これをに入れて~/.ssh/config
実行しますssh computertwo
。
Host computerone
HostName computerone.com
UserName user
Host computertwo
HostName computertwo.com
UserName otheruser
ProxyCommand ssh computerone exec nc %h %p
nc
あるnetcatを。利用可能ないくつかのバージョンのいずれかが行います。
sshでPROXY Jumpオプションを使用できます
-J [user@]host[:port]
Connect to the target host by first making a ssh connection to the jump host and then establishing a TCP forwarding to the ultimate destination from there. Multiple jump hops may be specified
separated by comma characters. This is a shortcut to specify a ProxyJump configuration directive.
したがって、hostBに接続する必要があるが、そこに到達するにはまずhostAを経由する必要がある場合。通常は
ssh hostA
[user@hostA ~]$ ssh hostB
私は今これをします
ssh -J hostA hostB
[user@hostB ~]$
ssh
!