回答:
公開鍵認証を使用する以外に、いくつかのオプションがあります。
sshpassにチャンスを与えることにした場合、これを行うための実用的なスクリプトスニペットを次に示します。
export SSHPASS=your-password-here
sshpass -e sftp -oBatchMode=no -b - sftp-user@remote-host << !
cd incoming
put your-log-file.log
bye
!
SSHPASS=password sshpass -e ...
すべきです
sshpass -p "my_password" sftp -oPort=9999 user@host:dir/file.log
-oBatchMode=no
私にとって欠けていた欠片でした。
別の方法はlftpを使用することです:
lftp sftp://user:password@host -e "put local-file.name; bye"
この方法の欠点は、コンピューター上の他のユーザーがツールなどからパスワードを読み取るps
ことができ、パスワードがシェル履歴の一部になる可能性があることです。
LFTP 4.5.0以降で利用できるより安全な代替手段は、LFTP_PASSWORD
環境変数を設定し、でlftpを実行することです--env-password
。ここに完全な例があります:
LFTP_PASSWORD="just_an_example"
lftp --env-password sftp://user@host -e "put local-file.name; bye"
LFTPには、クールなミラーリング機能も含まれています(転送の確認後に削除を含めることができます--Remove-source-files
)。
lftp -e 'mirror -R /local/log/path/ /remote/path/' --env-password -u user sftp.foo.com
put-script
:open sftp://user:password@host; put local-file.name; exit
実行よりlftp -f put-script
この方法では、コマンドラインにユーザー名とパスワードを入力する必要はなく、スクリプトファイルへの制限付きのアクセス許可を設定できます。
lftp
とsftp
をいじるよりもはるかに簡単sshpass
です。いい答えだ。
Expectは優れたプログラムです。
Ubuntuでは、次のようにインストールします。
sudo apt-get install expect
CentOSマシンにインストールする場合:
yum install expect
sftpサーバーに接続して、ローカルマシンからリモートsftpサーバーにローカルファイルをアップロードするとします。
#!/usr/bin/expect
spawn sftp username@hostname.com
expect "password:"
send "yourpasswordhere\n"
expect "sftp>"
send "cd logdirectory\n"
expect "sftp>"
send "put /var/log/file.log\n"
expect "sftp>"
send "exit\n"
interact
これにより、サーバーへのパスワードでsftp接続が開きます。
次に、ファイルをアップロードするディレクトリ、この場合は「logdirectory」に移動します
これにより、/ var / log /にあるローカルディレクトリからファイル名がfile.logのログファイルがリモートサーバーの「logdirectory」にアップロードされます。
シェルスクリプトでlftpを対話的に使用して、次のようにして、パスワードが.bash_historyなどに保存されないようにすることができます。
vi test_script.sh
以下をファイルに追加します。
#!/bin/sh
HOST=<yourhostname>
USER=<someusername>
PASSWD=<yourpasswd>
cd <base directory for your put file>
lftp<<END_SCRIPT
open sftp://$HOST
user $USER $PASSWD
put local-file.name
bye
END_SCRIPT
ホスト、ユーザー、パス、およびディレクトリを編集してputファイルを入力した後、viエディターを書き込み/終了します。次に:wq
、スクリプトを実行可能にchmod +x test_script.sh
して実行し./test_script.sh
ます。
最近、サーバー間のファイル転送を保護するために、ftpからsftpに切り替えるように依頼されました。Tectia SSHパッケージを使用しています。これには--password
、コマンドラインでパスワードを渡すオプションがあります。
例: sftp --password="password" "userid"@"servername"
バッチの例:
(
echo "
ascii
cd pub
lcd dir_name
put filename
close
quit
"
) | sftp --password="password" "userid"@"servername"
ヘルプコマンド(sftp -h
)を実行する前にさまざまなWebサイトを見ていたので、この情報を共有する必要があると思い、パスワードオプションを見て驚いた。
ps
パスワードを見ることができます。
unknown option -- - usage: sftp [-1246aCfpqrv] [-B buffer_size] [-b batchfile] [-c cipher] [-D sftp_server_path] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-R num_requests] [-S program] [-s subsystem | sftp_server] host sftp [user@]host[:file ...] sftp [user@]host[:dir[/]] sftp -b batchfile [user@]host
パスワードレス認証を有効にすることで上書きできます。ただし、その前にキー(pub、priv)をインストールする必要があります。
ローカルサーバーで次のコマンドを実行します。
Local $> ssh-keygen -t rsa
プロンプトが表示されたすべてのオプションでEnterキーを押します。値を入力する必要はありません。
Local $> cd .ssh
Local $> scp .ssh/id_rsa.pub user@targetmachine:
Prompts for pwd$> ENTERPASSWORD
次のコマンドを使用してリモートサーバーに接続します
Local $> ssh user@targetmachine
Prompts for pwd$> ENTERPASSWORD
リモートサーバーで次のコマンドを実行します
Remote $> mkdir .ssh
Remote $> chmod 700 .ssh
Remote $> cat id_rsa.pub >> .ssh/authorized_keys
Remote $> chmod 600 .ssh/authorized_keys
Remote $> exit
ローカルサーバーで次のコマンドを実行して、パスワードなしの認証をテストします。パスワードなしで接続する必要があります。
$> ssh user@targetmachine
lftp -p ${port} -u ${login_id},${password} ${ip_number}
から、このコマンドはシェルスクリプトから呼び出されたときにどこに出力されますか?sshpassとは別にどのように解決しましたか?
lftp
としませんsshpass
。
sftpがパスワードを要求するのを待ってから送信するBashプログラム:
#!/bin/bash
expect -c "
spawn sftp username@your_host
expect \"Password\"
send \"your_password_here\r\"
interact "
プロンプトを受け取ったものと一致するように、expectをインストールし、「パスワード」の文言を小文字の「p」に変更する必要がある場合があります。ここでの問題は、パスワードがファイルとコマンド履歴にプレーンテキストで公開されることです。これは、そもそもパスワードを設定する目的にほとんど反するものです。
sshpassを使用できます。以下が手順です
sudo apt-get install sshpass
sshpass -p '#Password_For_remote_machine' scp /home/ubuntu/latest_build/abc.war #user@#RemoteIP:/var/lib/tomcat7/webapps