推奨されていないことはわかっていますが、ユーザーのパスワードを scp に渡すことはまったく可能ですか?
バッチ ジョブの一部として scp 経由でファイルをコピーしたいのですが、もちろん、受信サーバーにはパスワードが必要です。いいえ、それをキーベースの認証に簡単に変更することはできません。
推奨されていないことはわかっていますが、ユーザーのパスワードを scp に渡すことはまったく可能ですか?
バッチ ジョブの一部として scp 経由でファイルをコピーしたいのですが、もちろん、受信サーバーにはパスワードが必要です。いいえ、それをキーベースの認証に簡単に変更することはできません。
sshpassを使用します。
sshpass -p "password" scp -r user@example.com:/some/remote/path /some/local/path
またはパスワードがbash履歴に表示されない
sshpass -f "/path/to/passwordfile" scp -r user@example.com:/some/remote/path /some/local/path
上記は、パスの内容をリモート ホストからローカルにコピーします。
インストール :
apt install sshpass
yum install sshpass
port install sshpass
brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb
次のような ssh キーを生成するだけです。
ssh-keygen -t rsa -C "your_email@youremail.com"
のコンテンツをコピーし、~/.ssh/id_rsa.pub
最後にリモート マシンに追加します。~/.ssh/authorized_keys
リモートマシンにアクセス許可があることを確認し0700 for ~./ssh folder
、0600 for ~/.ssh/authorized_keys
Windows からサーバーに接続している場合、scp の Putty バージョン (「pscp」) では、-pw
パラメーターを使用してパスワードを渡すことができます。
unix/端末で「expect」スクリプトを使用できます
たとえば、「test.exp」を作成します。
#!/usr/bin/expect
spawn scp /usr/bin/file.txt root@<ServerLocation>:/home
set pass "Your_Password"
expect {
password: {send "$pass\r"; exp_continue}
}
スクリプトを実行する
expect test.exp
それが役立つことを願っています。
expect
ツールを使用してそれを行う方法の例を次に示します。
sub copyover {
$scp = Expect->spawn("/usr/bin/scp ${srcpath}/$file $who:${destpath}/$file");
$scp->expect(30,"ssword: ") || die "Never got password prompt from $dest:$!\n";
print $scp 'password' . "\n";
$scp->expect(30,"-re",'$\s') || die "Never got prompt from parent system:$!\n";
$scp->soft_close();
return;
}
誰も言及していませんが、Putty scp (pscp) にはパスワードの -pw オプションがあります。
ドキュメントはこちらにあります: https://the.earth.li/~sgtatham/putty/0.67/htmldoc/Chapter5.html#pscp
ssh-copy-id
ssh キーを追加するために使用できます。
$which ssh-copy-id #check whether it exists
存在する場合:
ssh-copy-id "user@remote-system"
上記のように設定したらssh-keygen
、次のことができます
scp -i ~/.ssh/id_rsa /local/path/to/file remote@ip.com:/path/in/remote/server/
毎回の入力を減らしたい場合は、.bash_profile
ファイルを変更して
alias remote_scp='scp -i ~/.ssh/id_rsa /local/path/to/file remote@ip.com:/path/in/remote/server/
次に、端末から実行しますsource ~/.bash_profile
。その後remote_scp
、端末に入力すると、scp
パスワードなしでコマンドが実行されます。
「expect」ツールがあることを確認してから、そうでない場合は実行してください
# apt-get install expect
次の内容のスクリプト ファイルを作成します。(# vi /root/スクリプトファイル)
spawn scp /path_from/file_name user_name_here@to_host_name:/path_to
expect "password:"
send put_password_here\n;
interact
「expect」ツールでスクリプトファイルを実行する
# expect /root/scriptfile
厳密なホスト キー チェック エラーが発生した場合は、-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null
オプションを使用します。
完全な例は次のとおりです。
sshpass -p "password" scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@domain-name.com:/tmp/from/psoutput /tmp/to/psoutput
別の方法として、ユーザーのキーの公開半分をターゲット システムの承認済みキー ファイルに追加することもできます。転送を開始するシステムで、ssh-agent デーモンを実行し、鍵の秘密の半分をエージェントに追加できます。その後、鍵のパスワードを要求するのではなく、エージェントを使用して秘密鍵を取得するようにバッチ ジョブを構成できます。
これは、UNIX/Linux システムでも、pageant と pscp を使用する Windows プラットフォームでも実行できるはずです。