web-dev-qa-db-ja.com

SFTPアップロードスクリプト、キーはありません

ファイルをサーバーにアップロードする必要があります。

サーバーはSFTPを使用してアップロードします。認証後、コマンドの実行は禁止されているため、直接SSHで接続することはできません。SFTPサブシステムに直接アクセスする必要があります。

例えば。

ssh -N [email protected]は正常に機能しますが、SFTPが何もできないことを除きます。

ただし、sftp [email protected]結構です。

問題:これを自動化する必要があります。認証はキーボードベースではなく、キーボードインタラクティブです。私は接続しているサーバーを所有していません。彼らは単に「ここにパスワードがあります、毎週ファイルをアップロードします。」そしてそこに誰もいませんキーやそのようなものについて何でも知っています。

sftp -bバッチスクリプトは、キーボードインタラクティブ認証を許可しません。

ファイルを手動でアップロードするのがうんざりです。彼らは暗号化されていない電子メールで8文字のパスワードを送信し、最後に3つの同じ数字と1つの辞書Word(つまり「Words777」)を含んでいます。

パスワードだけでSSHキーを作成できますか?覚えておいて、私は他のサーバーにアクセスできません。これを何らかの方法でスクリプト化できますか?さまざまなパッケージを使用して、アップロードするためにrsyncを使用しようとしましたが、それらはすべてSFTPサブシステムに直接アクセスするのではなく、SSHに直接アクセスすることを望んでいます。

1
Incognito

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"
2
Incognito

「パスフレーズ」で保護してsshキーwithoutを作成すると、キーボードインタラクティブ部分をスキップして、アップロードスクリプトを簡単に作成できると思いますあなたが必要です。 ここの例を参照

ssh-keygen -t rsa -C "Your Name" -f your_key

これにより、必要なファイルが作成されます。その後、リモートサーバーにパブリックファイル(* .pub)をコピーするだけです。

2
dandelionmood

Socat を使用します。

例:

(sleep 2; echo password) | socat - EXEC: "sftp -o batchmode=no -o PubkeyAuthentication=no -b batchfile user@Host",pty,setsid,ctty
0
user141292