最新のSSHアクセスを必要とするPowerPCを備えた古いPowerMac G5を使用しています。ベンダーのサポートはありません。OpenSSLとOpenSSHを更新し、それらをにインストールしました/usr/local
。更新sshd
は/usr/local/sbin/sshd
、ポート1522にあり、リッスンします。
サーバーへの接続が拒否され、クライアントにが表示されますssh_exchange_identification: Connection closed by remote host
。-d
サーバーでのロギングと、への書き込みを有効に/var/log/sshd.log:sshd re-exec requires execution with an absolute path
しましたstderr
。
テスト接続の完全なトランスクリプトは次のとおりです。
$ grep -I -R sshd /var/log 2>/dev/null
/var/log/appfirewall.log:Aug 23 13:15:22 riemann.local socketfilterfw[122] <Info>: sshd is listening from 0.0.0.0:1522 proto=6
/var/log/appfirewall.log:Aug 23 13:15:22 riemann.local socketfilterfw[122] <Info>: sshd is listening from :::1522 proto=6
/var/log/sshd.log:Aug 23 13:16:43 riemann.local launchproxy[362] <Info>: /usr/local/sbin/sshd: Connection from: 127.0.0.1 on port: 49157
/var/log/sshd.log:sshd re-exec requires execution with an absolute path
ビルド時にOpenSSHを構成したとき、フォークの動作に関連するオプションを思い出しません。./configure --help | egrep "(fork|re-exec)"
何も返しません。で設定しました./configure --without-ssh1 --with-ssl-dir=/usr/local/ssl/darwin --with-zlib=/usr/local --prefix=/usr/local
。
分岐するときにsshd
絶対パス(/usr/local/sbin/sshd
)を使用するように指示するにはどうすればよいですか?
EDIT。エラーメッセージのsshd re-exec requires execution with an absolute path
原因は次のとおりですsshd.c
。1625行の近くにあります。
if (!test_flag && (rexec_flag && (av[0] == NULL || *av[0] != '/')))
fatal("sshd re-exec requires execution with an absolute path");
印刷するコードを変更するav[0]
と、実行可能ファイルまたはパスがないことが示されます。新しいメッセージには(以下の変更のため)が含まれ(re-exec with "-i -d")
ます。
if (!test_flag && (rexec_flag && (av[0] == NULL || *av[0] != '/')))
fatal("sshd re-exec requires execution with an absolute path (re-exec with \"%s\")", (av[0] ? av[0] : "<NULL>"));
残念ながら、plistを次のように変更します。
<key>ProgramArguments</key>
<array>
<string>/usr/local/sbin/sshd -i -d</string>
</array>
結果は次のとおりです(sshd.c
まだ入力した絶対パスは削除されていますargv[0]
):
$ sudo grep 'sshd' /var/log/* 2>/dev/null
/var/log/system.log:Aug 23 15:51:22 riemann.local sshd -i -d[1243]: error: Bind to port 22 on 0.0.0.0 failed: Address already in use.
/var/log/system.log:Aug 23 15:51:22 riemann.local sshd -i -d[1243]: error: Bind to port 22 on :: failed: Address already in use.
/var/log/system.log:Aug 23 15:51:22 riemann.local sshd -i -d[1243]: fatal: Cannot bind any address.
Launchdが起動時にデーモンを起動するためにどのように/何を使用するのかわかりませんが、plistを以下に示します。スタートアップは問題ありません。この問題は、クライアントがfork / exec中に接続するときに発生します。
で開始したら停止できsudo launchctl unload /System/Library/LaunchDaemons/ssh-7.1.plist
ます。その後、で再起動できsudo launchctl load /System/Library/LaunchDaemons/ssh-7.1.plist
ます。
$ cat /System/Library/LaunchDaemons/ssh-7.1.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Disabled</key>
<true/>
<key>Label</key>
<string>com.openssh.sshd-v7.1</string>
<key>Program</key>
<string>/usr/local/sbin/sshd</string>
<key>ProgramArguments</key>
<array>
<string>-i -d</string>
</array>
<key>Sockets</key>
<dict>
<key>Listeners</key>
<dict>
<key>SockServiceName</key>
<string>1522</string>
</dict>
</dict>
<key>inetdCompatibility</key>
<dict>
<key>Wait</key>
<false/>
</dict>
<key>StandardErrorPath</key>
<string>/var/log/sshd.log</string>
<key>SHAuthorizationRight</key>
<string>system.preferences</string>
</dict>
</plist>
sshd
相対パスで開始する場合、私の経験から開始することさえ拒否する必要があります
-d
スイッチを削除しても、forkでreexecを交換するため、パスについて不平を言うことはもうないはずです(re-execはデバッグのみで使用されます)。
-i
すると、元の問題が発生します。テストするMacがありますか?私が使用した手順は次のとおりです。OSX用のOpenSSHの構築?。私は他の人を助けるために使用した手順を書き起こしましたが、それはちょうど私を助けるかもしれません:)
sshd
ますか教えてください。再実行には絶対パスが必要です。つまり、直接起動することはできませんsshd
が、のように完全なパスを指定する必要があります/usr/local/sbin/sshd
。これがすべての魔法です