是否可以設置 scp 命令的路徑以供 OpenSSH sshd 守護程序使用?
我對 SLES 12 SP4 Linux 伺服器中的 OpenSSH 有一個奇怪的問題。
我們在我們的伺服器上安裝了一個定制的 OpenSSH,所以在每台機器上我們都有兩個版本的 OpenSSH,一個是作業系統的官方包,另一個是我們自己編譯的。
對於 SLES 12 SP4,如果我們從另一台伺服器執行以下命令
scp -r directory/. destination_server:/path/to/directory
出現以下錯誤
scp: error: unexpected filename: .
我們已經驗證問題出在 /usr/bin/scp 下的 scp 二進製文件上,它是由我們的 OpenSSH 而不是它自己路徑下的 scp 執行的。
經過搜尋和測試,應用的解決方案是刪除 /usr/bin/scp 的執行權限,所以我們的 OpenSSH 版本不能使用它,客戶端的 scp -r 可以正常工作。
有沒有更優雅的方式告訴守護程序在自己的路徑下使用 scp 二進製文件而不是 /usr/bin/scp?
最好的祝福
它不是
scp
直接使用該程序的 SSH 守護程序,所以不,您不能重新配置它以使用另一個二進製文件。您需要從系統中刪除除“正確”scp
二進製文件之外的所有二進製文件,或重寫PATH
環境變數(最好在系統預設配置文件中),因為從 SSH 守護程序的角度來看,scp
它只是執行遠端命令的包裝器。基本上,這是做什麼
scp
的:
- 通過啟動連接
ssh
- 通過通道發送
scp -t (target path)
命令,就像您使用ssh user@target scp -t /this/file
命令一樣。- 發送訪問模式和文件長度,以 ‘\n’ 結尾。
- 通過 SSH 通道發送文件內容。
您可以使用以下命令模擬 scp:
ssh user@host scp -t /tmp/aFile.to.create (enter your password) C0664 41 originalFileName The file should contain these two lines. (press enter twice)
第三行包含訪問權限、文件大小和原始文件名。並且由於
scp
命令“按原樣”發送,因此由目標系統為使用者找到該程序。
基於@Lacek 回答中的出色資訊以及以下記錄顯示的有關如何
sshd
由 管理的內容systemd
,我想說它應該很容易解決。就像我可以添加
PATH=/path/to/new/ssh/bin:$PATH
到我的 bash 配置文件一樣,我可以將它添加到/etc/systemd/system/sshd.service
viaEnvironment="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=