ファイルをサーバーにアップロードする必要があります。
サーバーはSFTPを使用してアップロードします。認証後、コマンドの実行は禁止されているため、直接SSHで接続することはできません。SFTPサブシステムに直接アクセスする必要があります。
例えば。
ssh -N [email protected]
は正常に機能しますが、SFTPが何もできないことを除きます。
ただし、sftp [email protected]
結構です。
問題:これを自動化する必要があります。認証はキーボードベースではなく、キーボードインタラクティブです。私は接続しているサーバーを所有していません。彼らは単に「ここにパスワードがあります、毎週ファイルをアップロードします。」そしてそこに誰もいませんキーやそのようなものについて何でも知っています。
sftp -b
バッチスクリプトは、キーボードインタラクティブ認証を許可しません。
ファイルを手動でアップロードするのがうんざりです。彼らは暗号化されていない電子メールで8文字のパスワードを送信し、最後に3つの同じ数字と1つの辞書Word(つまり「Words777」)を含んでいます。
パスワードだけでSSHキーを作成できますか?覚えておいて、私は他のサーバーにアクセスできません。これを何らかの方法でスクリプト化できますか?さまざまなパッケージを使用して、アップロードするためにrsync
を使用しようとしましたが、それらはすべてSFTPサブシステムに直接アクセスするのではなく、SSHに直接アクセスすることを望んでいます。
Expect をインストールすると、このような状況のスクリプトを作成できます。
Sudo apt-get install expect
シェルスクリプトを設定する
#!/bin/bash
Host=""
USER=""
PASS=""
# Sorry for the offensive "assword", it's to cope with "Password" and "password".
VAR=$(expect -c "
spawn sftp $USER@$Host
expect \"assword:\"
send \"$PASS\r\"
expect \"\\\\$\"
send \"ls\r\"
expect -re \"$USER.*\"
send \"exit\"
")
echo "==============="
echo "$VAR"
「パスフレーズ」で保護してsshキーwithoutを作成すると、キーボードインタラクティブ部分をスキップして、アップロードスクリプトを簡単に作成できると思いますあなたが必要です。 ここの例を参照 :
ssh-keygen -t rsa -C "Your Name" -f your_key
これにより、必要なファイルが作成されます。その後、リモートサーバーにパブリックファイル(* .pub)をコピーするだけです。
Socat を使用します。
例:
(sleep 2; echo password) | socat - EXEC: "sftp -o batchmode=no -o PubkeyAuthentication=no -b batchfile user@Host",pty,setsid,ctty