377

推奨されていないことはわかっていますが、ユーザーのパスワードを scp に渡すことはまったく可能ですか?

バッチ ジョブの一部として scp 経由でファイルをコピーしたいのですが、もちろん、受信サーバーにはパスワードが必要です。いいえ、それをキーベースの認証に簡単に変更することはできません。

4

19 に答える 19

645

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

上記は、パスの内容をリモート ホストからローカルにコピーします。

インストール :

  • Ubuntu/デビアン
    • apt install sshpass
  • セントス/フェドーラ
    • yum install sshpass
  • mac と macports
    • port install sshpass
  • マックウィズブリュー
    • brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb
于 2012-12-19T15:17:15.563 に答える
62

次のような ssh キーを生成するだけです。

ssh-keygen -t rsa -C "your_email@youremail.com"

のコンテンツをコピーし、~/.ssh/id_rsa.pub 最後にリモート マシンに追加します。~/.ssh/authorized_keys

リモートマシンにアクセス許可があることを確認し0700 for ~./ssh folder0600 for ~/.ssh/authorized_keys

于 2012-02-21T22:17:21.303 に答える
51

Windows からサーバーに接続している場合、scp の Putty バージョン (「pscp」) では、-pwパラメーターを使用してパスワードを渡すことができます。

これは、こちらのドキュメントに記載されています。

于 2010-11-30T02:41:39.380 に答える
40

expectなどのツールを使用してスクリプトを作成できます(Python 用のPexpectなどの便利なバインディングもあります)。

于 2008-09-08T16:38:10.297 に答える
22

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 

それが役立つことを願っています。

于 2013-01-16T15:01:41.170 に答える
9

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;
}
于 2008-09-08T16:42:03.160 に答える
8

誰も言及していませんが、Putty scp (pscp) にはパスワードの -pw オプションがあります。

ドキュメントはこちらにあります: https://the.earth.li/~sgtatham/putty/0.67/htmldoc/Chapter5.html#pscp

于 2015-05-13T17:16:26.900 に答える
8

ssh-copy-idssh キーを追加するために使用できます。

$which ssh-copy-id #check whether it exists

存在する場合:

ssh-copy-id  "user@remote-system"
于 2016-11-22T09:35:16.993 に答える
4

上記のように設定したら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パスワードなしでコマンドが実行されます。

于 2017-10-20T07:08:58.833 に答える
1
  1. 「expect」ツールがあることを確認してから、そうでない場合は実行してください

    # apt-get install expect

  2. 次の内容のスクリプト ファイルを作成します。(# vi /root/スクリプトファイル)

    spawn scp /path_from/file_name user_name_here@to_host_name:/path_to

    expect "password:"

    send put_password_here\n;

    interact

  3. 「expect」ツールでスクリプトファイルを実行する

    # expect /root/scriptfile

于 2014-03-21T06:04:33.367 に答える
0

厳密なホスト キー チェック エラーが発生した場合は、-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

于 2020-12-02T15:55:38.063 に答える
-2

別の方法として、ユーザーのキーの公開半分をターゲット システムの承認済みキー ファイルに追加することもできます。転送を開始するシステムで、ssh-agent デーモンを実行し、鍵の秘密の半分をエージェントに追加できます。その後、鍵のパスワードを要求するのではなく、エージェントを使用して秘密鍵を取得するようにバッチ ジョブを構成できます。

これは、UNIX/Linux システムでも、pageant と pscp を使用する Windows プラットフォームでも実行できるはずです。

于 2008-09-16T08:16:54.850 に答える