質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Q&A

解決済

2回答

3159閲覧

ssh agentを使用しcronでscpを動かす。

stweoigh

総合スコア13

cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

0グッド

1クリップ

投稿2019/10/29 01:43

前提・実現したいこと

cronでリモートサーバにてSCP及びssh接続を自動実行させようとしています。
SSH接続にはssh agentを使用しています。

発生している問題・エラーメッセージ

以下のようにpermission deniedされてしまいます。

Permission denied (publickey).

該当のソースコード

bash

1#!/bin/sh 2 3AGENT=`ls -lt /tmp/ssh*/agent*` 4 5if [ -z "${AGENT}" ];then 6## agentファイルが作成されていなければ以下のコマンドで作成 7eval `ssh-agent` 8ssh-add 9TEMPAGENT="ON" 10 11## 権限も変更します。 12chmod 775 `ls -lt /tmp/ssh*/agent* | awk '{print $9}'` 13 14fi 15 16##環境変数の${SSH_AUTH_SOCK}もcronだと最初は空になっている可能性があるので 17##その場合はexportします。 18 19if [ -z "${SSH_AUTH_SOCK}" ];then export SSH_AUTH_SOCK=`ls -ltr /tmp/ssh*/agent* | head -n 1 | gawk '{print $9}'`;fi 20 21##以下のファイルも権限変更します。 22chmod 0600 ~/.ssh/authorized_keys 23 24scp -i ~/.ssh/authorized_keys remote:/home/user/test.csv ./ 25 26##冒頭でagent作成していれば削除 27if [ -n "${TEMPAGENT}" ];then eval `ssh-agent -k`;fi

###試したこと

echoで以下の状態を確認しました。
・「ls -lt /tmp/ssh*/agent* 」の結果はeval agentで作成した
agentファイルのみ。
・${SSH_AUTH_SOCK}にも上記ファイルがexportされている
・権限もsrwxrwxr-xになっている。

他に設定すべきコマンドなどご存知でしたらご教授いただけますでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maai

2019/10/29 03:38

- cronユーザは誰でしょうか - .ssh/authorized_keys にパスワードは付いていますか? - ターミナルから `scp -i ~/.ssh/authorized_keys remote:/home/user/test.csv ./`は出来ますか? パスワード無し・かつcronユーザが秘密鍵と同じユーザならssh-agentの設定無しで出来ると思います
stweoigh

2019/10/29 05:24 編集

コメントありがとうございます。 - cronユーザは誰でしょうか  →秘密鍵と同じユーザです - .ssh/authorized_keys にパスワードは付いていますか?  →ついていないです - ターミナルから `scp -i ~/.ssh/authorized_keys remote:/home/user/test.csv ./`は出来ますか?  →できます。 >パスワード無し・かつcronユーザが秘密鍵と同じユーザならssh-agentの設定無しで出来ると思います →ssh-agentを起動させないと${SSH_AUTH_SOCK}が空っぽで  「Permission denied (publickey).」と出てしまいます。。。
guest

回答2

0

自己解決

投稿2019/11/01 05:50

stweoigh

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

scp -i ~/.ssh/authorized_keys remote:/home/user/test.csv ./ とありますが、
authorized_keys は秘密鍵では無いような…?

投稿2019/10/29 03:38

maai

総合スコア463

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

stweoigh

2019/10/29 06:17

authorized_keysのファイル形式を見てみたところ、Public keyでした。 失礼しました・・。 本サーバーは踏み台サーバとして使っており、秘密鍵は作業端末にしか入っていないようです。。。 試しに作業端末から踏み台サーバの.ssh/配下に秘密鍵をコピーして 以下で実行しましたが、ターミナルからはOKでcronからだとやはりアウトでした・・・。 scp -i ~/.ssh/test remote:/home/user/test.csv ./ 実行権限とファイル形式は作業端末に入っている秘密鍵と同じ 600,"OpenSSH private key"です。
maai

2019/10/29 13:15

> 「Permission denied (publickey).」と出てしまいます。。。 ごめんなさい…git (ssh)をcronで動かそうとした時に同じような経験があり、そちらではパスワード無しで出来てしまったので… あ、そういえば秘密鍵の絶対パス指定は試されましたか?(`~/.ssh/test ` ではなく、`/home/yournamehere/.ssh/test` で)
stweoigh

2019/11/01 05:47

返信遅くなり申し訳ございません。 gitはパスなしでOKなのですね。別件で実現したいなと思っていたので今度試してみます! ありがとうございます。 絶対パスも試しましたがやはりだめでした。 なのでcron用に別の証明書を発行して使用するようにし、 pythonのpexpectコマンドで毎回agentを作成してパスワードを自動入力してcron用の証明書を使用する という荒業でなんとか動きました。。。 agentの作成はすでに書いている内容のままです。 本件はクローズしますが、貴重なご意見ありがとうございました。 参考:https://open-groove.net/python/pexpect-create-password/
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問