環境:Ubuntu 14.04。
Sshマルチホップでroot以外のアカウントを使用する場合、問題ありません。
しかし、ルートアカウントに切り替えると($Sudo -i
)、sshマルチホップは機能せず、常にエラー「bash: nc: command not found
"、そして/ bin/ncは確かにそこにあります!
非常に奇妙な。誰かヒントがありますか?
マルチホップのssh設定は次のようなものです。
cat ~/.ssh/config
# Multi-Hop SSH
Host serverA
HostName serverA.abc.net
# Multi-Hop SSH
Host sha
ProxyCommand ssh -q serverA nc sha.abc.net 22
この距離から問題が何であるかを正確に伝えることは困難ですが、「serverA」のシェル環境でパスが設定されていない、または正しく設定されていることが原因である可能性があります。
使用しないことをお勧めしますが、nc
の場所をフルパスで指定することが最初の提案です。したがって:
ProxyCommand ssh -q serverA /bin/nc sha.example.net 22
移植性のために、nc
がすべてのシステムのこの場所に存在するとは限らないことを覚えておいてください。たとえば、FreeBSDおよびOSXでは/usr/bin/nc
にあります。
Ubuntu 14.04に含まれているOpenSSHのバージョンを思い出しませんが、それが十分に新しい場合(つまり、OpenSSHバージョン5.4以降)、nc
コマンドをSSHの内部-W
オプションで置き換えることができます。これは、sshに「netcatモード」で実行するように指示します。 ~/.ssh/config
エントリを次のように置き換えます。
# gateway Host
host serverA
hostname serverA.example.net
Host sha
proxycommand ssh -xaqW%h:22 serverA
X11の転送とエージェント認証を無効にするために-x
と-a
も含めていることに注意してください。
ルートとしてこれを行うことについてのクエリについては、ルートとしてsshを使用しないことをお勧めします。サーバーまたはクライアントのいずれか。 sshd_configファイル(/ etc /または/ etc/ssh /内)にPermitRootLogin no
が設定されていることを確認し、権限のないユーザーとしてのみ認証します。クライアントサイトで、リモートシステム上の特定のrootアカウントにアクセスする必要がある場合は、Sudoを使用してそのアクセス権を取得する非特権ユーザーに自動化を構築します。正しい方法で物事を行うことは決して悪い考えではありません。 :)