コンピューターのディレクトリからリモートサーバーのディレクトリに.pngファイルを転送したい。
ファイルと転送モードを保護するには、SFTPを使用する必要があります。そして、私はすでに通常モードでファイルをコピーするためのUNIXスクリプト(.ksh)ファイルを持っています。 SFTPモードで転送を実装するにはどうすればよいですか?
。kshスクリプトで使用しているコマンドの代わりに、sftp
を使用します。参考のために sftp man を参照してください。
scp
セキュアコピー- scp man も確認することをお勧めします。
sftp
は主にインタラクティブな操作用であり、接続するホストを指定する必要があります。
sftp example.com
ユーザー名とパスワードの入力を求められ、インタラクティブセッションが開始されます。
スクリプトで使用できますが、scp
の方がはるかに使いやすいです。
scp /path/to/localfile user@Host:/path/to/dest
パスワードの入力を求められます。
scp
とsftp
はどちらも基礎となるプロトコルとしてssh
を使用します。 this および this を参照してください。
スクリプトから実行するようにそれらを設定する最良の方法は、キーを使用してパスワードなしの認証を設定することです。 this および this を参照してください。私はこれを私のサーバーで広く使用しています。キーを設定した後、実行できます
scp -i private-key-file /path/to/local/file user@Host:/path/to/remote
sftp -oIdentityFile=private-key-file -b batch-file user@Host
パスワードで認証したい場合は、expect
パッケージを試してみてください。最も単純なスクリプトは次のようになります。
#!/usr/bin/expect
spawn sftp -b batch-file user@Host
expect "*?assword:*"
send "pasword\n"
interact
ファイルを作成してmy_batch_fileとして保存します:
cd /root
get blah.txt
bye
これを実行してバッチファイルを実行します:
eric@dev /home/el $ sftp [email protected] < my_batch_file
Connecting to 10.30.25.15...
Password:
sftp> cd /root
sftp> get blah.txt
Fetching /root/blah.txt to blah.txt
sftp> bye
ファイルが転送されます
これにより、blah.txt
がリモートコンピューターからローカルコンピューターに移動しました。
パスワードを指定したくない場合は、次のようにします:
Bashスクリプトのパスワードを使用してsftpコマンドを実行する方法は?
または、ハッキーで安全でない方法で実行したい場合は、bashを使用して期待してください:
#!/bin/bash
expect -c "
spawn sftp username@your_Host
expect \"Password\"
send \"your_password_here\r\"
interact "
プロンプトが受け取るものと一致するように、expectをインストールし、「パスワード」の文言を小文字の「p」に変更する必要がある場合があります。ここでの問題は、パスワードがファイルとコマンド履歴にプレーンテキストで公開されることです。これは、そもそもパスワードを持つという目的をほぼ無効にします。