回答:
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
apt-get install sshpass
yum -y install sshpass
sshpass -f
passwdfile` SCP [...] . This way, the password won't show up in
などps`リスト、そしてあなたは、ファイルのアクセス権とパスワードを保護することができます。
次のような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
ssh-copy-id -i ~/.ssh/id_rsa.pub <remote_server>
リモートサーバー上のキーをコピーするために使用する必要があります
Windowsからサーバーに接続している場合、scp( "pscp")のPuttyバージョンでは、-pw
パラメーターを使用してパスワードを渡すことができます。
pscp -pw 'MyPa$$word' username@servername:/somedir/somefile ~/somedest
私はこのようにパテを使うのは嫌いですが、うまくいきます)
curlはscpの代わりにファイルをコピーするために使用でき、コマンドラインでパスワードをサポートします。
curl --insecure --user username:password -T /path/to/sourcefile sftp://desthost/path/
scp
パスワードを入力するには30秒以上待つ必要がありますが、curl
すぐに機能しました。
unix / terminalで '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-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
入力すると、パスワードなしでコマンドが実行されます。
以下は、このブログ投稿に基づく、貧しい人のLinux / Python / Expectに似た例です:単純なシェルを完全にインタラクティブなTTYにアップグレードする。Expectをインストールしたり、Pythonにモジュールを追加したりできない古いマシンにこれが必要でした。
コード:
(
echo 'scp jmudd@mysite.com:./install.sh .'
sleep 5
echo 'scp-passwd'
sleep 5
echo 'exit'
) |
python -c 'import pty; pty.spawn("/usr/bin/bash")'
出力:
scp jmudd@mysite.com:install.sh .
bash-4.2$ scp jmudd@mysite.com:install.sh .
Password:
install.sh 100% 15KB 236.2KB/s 00:00
bash-4.2$ exit
exit
代わりの方法は、ユーザーの鍵の公開半分をターゲットシステムの承認済み鍵ファイルに追加することです。転送を開始するシステムで、ssh-agentデーモンを実行して、鍵の秘密の半分をエージェントに追加できます。バッチジョブは、キーのパスワードを要求するのではなく、エージェントを使用して秘密キーを取得するように構成できます。
これは、UNIX / LinuxシステムまたはWindowsプラットフォームでpageantとpscpを使用して実行できるはずです。
上記のすべてのソリューションは、アプリがインストールされている場合、またはやsshpassを除いてインストールする管理者権限を持っている場合にのみ機能します。
scpをバックグラウンドで開始するだけの非常に便利なリンクを見つけました。
$ nohup scp file_to_copy user@server:/path/to/copy/the/file > nohup.out 2>&1
https://charmyin.github.io/scp/2014/10/07/run-scp-in-background/
rhel / centos 6のsshpassを取得する手順:
# wget http://epel.mirror.net.in/epel/6/i386/epel-release-6-8.noarch.rpm
# rpm -ivh epel-release-6-8.noarch.rpm
# yum install sshpass
rsync -r -v --progress -e ssh user@remote-system:/address/to/remote/file /home/user/
そこにパスワードを渡すことができるだけでなく、コピーするときに進行状況バーを表示します。本当に素晴らしい。