SLES 12 SP4LinuxサーバーのOpenSSHに奇妙な問題があります。
カスタマイズされたOpenSSHをサーバーにインストールするため、各マシンには、オペレーティングシステムの公式パッケージとコンパイル済みの2つのバージョンのOpenSSHがあります。
SLES 12 SP4の場合、別のサーバーから次のコマンドを実行すると
scp -r directory/. destination_server:/path/to/directory
次のエラーが発生します
scp: error: unexpected filename: .
問題は/ usr/bin/scpの下のscpバイナリにありますこれは、独自のパスの下のscpではなくOpenSSHによって実行されることを確認しました。
適用される解決策は/ usr/bin/scpの実行権限を削除することですを検索してテストした後、OpenSSHのバージョンでは使用できず、クライアントのscp-rは完全に機能します。
/ usr/bin/scpの代わりに独自のパスでscpバイナリを使用するようにデーモンに指示するよりエレガントな方法はありますか?
宜しくお願いします
私たちはそれを解決しました:-)
PATHはSSHDのバイナリにハードコードされています(sshdプロセスの/ proc仮想ファイルシステムの下にあるenvironファイルを監視していることを確認しました)ため、PATH環境変数の設定は役に立ちませんでした。
したがって、問題は、ディレクトリがsshdソースの設定ファイルに追加されたことでした後通常のシステムのパス。解決策は、ソースの構成ファイルの行19346を次のように変更することです。
user_path=$t_bindir:$user_path
の代わりに
user_path=$user_path:$t_bindir
($ t_bindirは、makeを使用したコンパイルの前にconfigureを実行するときに--bindirオプションで設定されたパスであり、$ user_pathは環境PATH値です)
したがって、わかりやすくするために、ソース内の構成ファイルの19343〜19350行は次のように残されています。
if test $? -ne 0 ; then
echo $user_path | grep "^$t_bindir" > /dev/null 2>&1
if test $? -ne 0 ; then
user_path=$t_bindir:$user_path
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Adding $t_bindir to USER_PATH so scp will work" >&5
$as_echo "Adding $t_bindir to USER_PATH so scp will work" >&6; }
fi
fi
宜しくお願いします
@Lacekからの回答の優れた情報と、sshd
がsystemd
によってどのように管理されているかについて次のトランスクリプトが示していることに基づいて、解決はかなり簡単なはずです。
PATH=/path/to/new/ssh/bin:$PATH
をbashプロファイルに追加するのと同じ方法で、/etc/systemd/system/sshd.service
( 文書化されている )を介してEnvironment="PATH=/path/to/new/ssh/bin:$PATH"
に追加するか、追加することができます/etc/default/ssh
に直接。
最近のUbuntuシステムは次のようになります。
ubuntu@ip-10-10-0-192:~$ find /etc/systemd/ -name '*ssh*' -ls
557 0 lrwxrwxrwx 1 root root 31 Oct 12 2018 /etc/systemd/system/multi-user.target.wants/ssh.service -> /lib/systemd/system/ssh.service
587 0 lrwxrwxrwx 1 root root 31 Oct 12 2018 /etc/systemd/system/sshd.service -> /lib/systemd/system/ssh.service
ubuntu@ip-10-10-0-192:~$ cat /etc/systemd/system/sshd.service
[Unit]
Description=OpenBSD Secure Shell server
After=network.target auditd.service
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run
[Service]
EnvironmentFile=-/etc/default/ssh
ExecStartPre=/usr/sbin/sshd -t
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
ExecReload=/usr/sbin/sshd -t
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartPreventExitStatus=255
Type=notify
[Install]
WantedBy=multi-user.target
Alias=sshd.service
ubuntu@ip-10-10-0-192:~$ cat /etc/default/ssh
# Default settings for openssh-server. This file is sourced by /bin/sh from
# /etc/init.d/ssh.
# Options to pass to sshd
SSHD_OPTS=