scp だけを無効化する zsh の設定ハック


CVE-2019-6111 により scp の脆弱性が明らかになっているので、 scp を無効化する方法を考えてみました。

そう、 zsh ならね

zsh で scp を使えなくするには、リモート ホストの ~/.zshenv にこう書きます。 (ログイン シェルを zsh にしている前提です。)

scp () {
    echo "Use 'sftp' or 'rsync' instead." >&2
    false
}

雑な解説

scp コマンドは、 non-interactive (非対話的) シェルで scp をリモート実行しようとするので、前述のシェル関数があると通信が阻害されて以下のようにエラーになります。

% /usr/sbin/scp remote:.zshenv /tmp/
Use 'sftp' or 'rsync' instead.
lost connection

絶対パスを指定しないと、もちろん以下のようにローカル側でエラーになります。

% scp remote:.zshenv /tmp/
Use 'sftp' or 'rsync' instead.

zsh 以外のシェルの場合

Bash では non-interactive シェルで暗黙的に実行されるスクリプトがないので、設定が面倒なのですよね。