ftp + .netrc を使用している既存のスクリプトがいくつかあります。
今すぐ sftp に切り替えたいのですが、マクロ / .netrc をサポートしていないようです。
他の代替手段はありますか?
助けてください。
簡単に言えば、 、または.netrcと一緒に使用することはできません。これらの製品は、名前に「セキュア」というキーワードが含まれる OpenSSH 標準の一部です。この方法でログインを自動化することは安全な方法ではなく、標準ではこの種の自動化 (パスワードの保存) を禁止しています。間違いなく代替手段があり、実際には 3 つです。sftpscpssh.netrc
最初の 2 つの選択肢のいずれについても、鍵をセットアップして交換する必要があります。run から接続しているマシンではssh-keygen、リスクはありますが、キーにパスフレーズを与えない方がはるかに簡単になります。.ssh/これで、と の2 つのファイルができましid_rsaたid_rsa.pub。これらのうち、id_rsa秘密にしておくか、保護する必要があります (したがって、パスフレーズ)。pub ファイルは、実際には 1 行のテキストです。この 1 行は~/.ssh/authorized_keys、受信ホスト側のファイルに追加できます。キーは手動でファイルに追加できます。しかし、またありますssh-copy-idまさにそれを行い、ファイルのアクセス許可も処理するショートカット コマンド。キーを承認すると、適切なユーザーとして接続すると、秘密キーを持つマシンから承認された公開キーを持つマシンに接続できるようになります。でテストしssh -vます。パスフレーズを入力した場合は、その入力を求められます。そうでない場合は、自動化の準備ができています。を使用するssh-agentと、パスフレーズを 1 回入力するだけで、セッション間で秘密鍵をアクティブに保つことができます。複数のsshホップを作成している場合、エージェントを転送するオプションを使用すると、元のソース ボックスの秘密キーをssh-agent各ホップで通信できます。個人的には、これはやり過ぎだと思うので、パスフレーズを使用しないことをお勧めします。
ssh、sftp、および接続をパスワードやパスフレーズを入力せずに作成できるようにscpなったので、残りを自動化する準備が整いました。
.netrcマクロをシェルスクリプトまたはいくつかのscpコマンドを呼び出す他のスクリプトに変換する場合は、これが推奨される代替手段です。curlこれは、またはを使用してすべての ftp 接続を自動化するのと似ていますwget。例えば:
scp -qr $USER@$REMOTE_HOST:$PATH_FILE_OR_DIR $LOCAL_PATH_FILE_OR_DIR #download
scp -qr $LOCAL_PATH_FILE_OR_DIR $USER@$REMOTE_HOST:$PATH_FILE_OR_DIR #upload
scp -pqr $USER@$REMOTE_HOST:$PATH_FILE_OR_DIR $USER@$REMOTE_HOST2:$PATH_FILE_OR_DIR #mirror between separate hosts.
ssh $USER@$REMOTE_HOST chmod 644 $PATH_FILE #set permissions
sftpあなたが述べたように、expectsコマンド、オプションを使用したバッチファイル-b、またはコマンドを にパイプすることでスクリプトを作成できますsftp。これはマクロに少し似てい.netrcますが、選択肢 1 に勝る利点はありません。後者の例を示します。
#!/bin/sh
echo "OK, starting now..."
sftp -b /dev/fd/0 remotehost <<EOF
cd pub
ascii
get filename.txt
bye
EOF
sftpパスワードなどの接続パラメーターを保存できるようにすることで、SSH 標準を破るプログラムを使用します。たとえば、cyberduckと AppleScript、またはFileZillaとキューを使用します。
ホスト名に短い名前を付けたり、転送パラメーター、デフォルトのディレクトリ、デフォルトのユーザー名、および各ホストの特定の ID を設定したりするために使用できる~/.ssh/configファイルがあります。また、転送レートをより妥当なものに制限するオプションも気に入っています。-lscp
.netrcPSマクロを(代替1スタイルの)シェルスクリプトに変換するためのツールがあると思います。しかし、何も見つかりませんでした。それは小さなニッチなビジネスチャンスですか?
マシンでパスワードなしの認証を使用できる場合(システム管理者によって禁止されている場合がありますが、通常は禁止されていません)、.netrcのマクロではなくシェルスクリプトでscpを使用すると便利です。ただし、リモートマシンにログインするためにパスワードを入力する必要がある場合は、「ヒアスクリプト」(EOFを含むビット)を使用して魔法をかけます。時々変更される場合は、シェルスクリプトを使用してftpスクリプトを作成できます。
これを行うにはパスワードなしのログイン (ssh キー) を使用できるため、scp を調べてみてください。
SFTP でも同じ手法を使用できるかもしれませんが、わかりません。