2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

scpを毎回自動でパスワード入力して実行する

Last updated at Posted at 2021-08-22

概要

以下、同僚の話である.

同僚 A は、リモート Linux に対して頻繁に scp でデータを転送していたが、
毎回ログインパスワード入力をしていて手間であった.
 
そこで上司に対してパスワード入力が省略できる「SSH公開鍵認証を行いたい」と
訴えたが、上司が次のように (意味不明な理由を) 言って拒否した.
 
「パスワード入力が省略できてしまうなんてダメです」
「毎回、パスワードを入力することに意味があるんです」

個人的には、このような上司の意見は無視して SSH公開鍵認証をしてしまえば良いと思うが、
同僚は次のようにして律儀に守ったようである.

 

実装

ローカルにある local.data を、リモートLinux の /tmp/. に配置する場合を例とする.

SSH_ASKPASS を使って「パスワードを標準出力するプログラム」を指定している.
そして「パスワードを標準出力するプログラム」は一時ファイルを用いたようである.
ここでのリモートLinux のログインパスワードは「password」である.

#!/bin/bash

# 一時ファイルを作成する. 作成された一時ファイルの絶対パスが TMPF に格納される.
TMPF=`mktemp`

# ソフトウェア割り込みが発生したら掴まえてパスワード表示プログラム「$TMPF」を削除する
trap "test ! -z \"$TMPF\" && rm -f $TMPF && exit 1" 1 2 15

# パスワード表示プログラムを「$TMPF」に書き出す
cat <<'EOL' > $TMPF
#!/bin/bash
echo 'password'
EOL

# パスワード表示プログラム「$TMPF」に実行権限を付与する
chmod +x $TMPF

# 環境変数「SSH_ASKPASS」に「$TMPF」の絶対パスを指定するだけでなく、
# 環境変数「DISPLAY」を空にして、且つ setsid を指定して実行する.
DISPLAY='' SSH_ASKPASS=$TMPF setsid scp -rp local.data <アカウント>@<IP>:/tmp/.

# 最後にパスワードが記された「$TMPF」を削除する.
rm -f $TMPF

以上.

 

参考にした記事

https://qiita.com/wadahiro/items/977e4f820b4451a2e5e0

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?