web-dev-qa-db-ja.com

OpenSSH sshdデーモンで使用するscpコマンドのパスを設定することは可能ですか?

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バイナリを使用するようにデーモンに指示するよりエレガントな方法はありますか?

宜しくお願いします

2
Ciges

私たちはそれを解決しました:-)

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

宜しくお願いします

0
Ciges

@Lacekからの回答の優れた情報と、sshdsystemdによってどのように管理されているかについて次のトランスクリプトが示していることに基づいて、解決はかなり簡単なはずです。

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=
0
Bruno Bronosky