web-dev-qa-db-ja.com

sshマルチホップでの「bash:nc:コマンドが見つかりません」エラー

環境: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
11
gary

この距離から問題が何であるかを正確に伝えることは困難ですが、「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を使用してそのアクセス権を取得する非特権ユーザーに自動化を構築します。正しい方法で物事を行うことは決して悪い考えではありません。 :)

12
ghoti