事象 : 多段階接続してSCPを実行したらエラーになった
- 環境 : Windows10 Pro バージョン21H1
$ scp ~/Desktop/file.sh targetserver:.
/usr/bin/ssh: No such file or directory
lost connection
原因 : scpコマンドが使うsshコマンドがないから
/usr/bin/ssh
というパスなので、最初は踏み台サーバの問題かとも思ったが、コマンドの場所を確認しておかしいことに気が付いた。
- どうやらscpコマンドは「/{GitBashのインストールディレクトリ}/usr/bin/」にあるGitBashのものを使用しているようだ
- そのscpコマンドは同じ「/{GitBashのインストールディレクトリ}/usr/bin/」にあるはずのssh.exeを使おうとしている
- しかし、「/{GitBashのインストールディレクトリ}/usr/bin/」にssh.exeはないので「そんなものはない」と言われている
- 本来はあるのかもしれないが、消してしまったのだろうか・・・
# sshコマンドはOpenSSHのものを使っている
$ which ssh
/c/WINDOWS/System32/OpenSSH/ssh
# scpコマンドは「/usr/bin/」にあるものを使っている
$ which scp
/usr/bin/scp
# Windowsなのに「/usr/bin/」?
$ cd /usr/bin/
# エクスプローラーで開いてみると「{GitBashのインストールディレクトリ}\usr\bin」のことだった
$ start .
# そして「/usr/bin/」にはssh.exeがない・・・
$ ls -la | grep ssh
-rwxr-xr-x 1 ponsuke 1049089 366436 1月 29 07:33 ssh-add.exe
-rwxr-xr-x 1 ponsuke 1049089 348015 1月 29 07:33 ssh-agent.exe
-rwxr-xr-x 1 ponsuke 1049089 12676 1月 29 07:33 ssh-copy-id
-rwxr-xr-x 1 ponsuke 1049089 888417 1月 29 07:33 sshd.exe
-rwxr-xr-x 1 ponsuke 1049089 495976 1月 29 07:33 ssh-keygen.exe
-rwxr-xr-x 1 ponsuke 1049089 455485 1月 29 07:33 ssh-keyscan.exe
-rwxr-xr-x 1 ponsuke 1049089 21618 1月 29 07:33 ssh-pageant.exe
対応 : OpenSSHのsshコマンドのシンボリックリンクを作る
ないものはないので、使っているOpenSSHのsshコマンドのシンボリックを「/usr/bin」につくってscpコマンドでも使ってもらうことにした。
参考 : Windowsでシンボリックリンクを作る | DevelopersIO
- コマンドプロンプトを管理者権限で起動する
- シンボリックリンクを作る
- もう一回scpする
# (コマンドプロンプトで実行)シンボリックリンクを作る
>mklink {GitBashのインストールディレクトリ}\usr\bin\ssh C:\Windows\System32\OpenSSH\ssh.exe
{GitBashのインストールディレクトリ}\usr\bin\ssh <<===>> C:\Windows\System32\OpenSSH\ssh.exe のシンボリック リンクが作成されました
# (いつものターミナルで実行)もう一回scpする
$ scp ~/Desktop/file.sh targetserver:.
Enter passphrase for key 'C:\Users\ponsuke/.ssh/fumidai.pem':
Enter passphrase for key 'C:\Users\ponsuke/.ssh/id_rsa':
file.sh
# めでたく転送できた