人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【Free BSD】

環境は、Free BSDで、接続先は、CentOS4.2です。

BSDからCentOSに接続させて、cronでバックアップさせるため、
SSHの認証を自動化させたいと考えています。

以下のコマンドを手動で打つと、認証なしの接続に成功します。
eval `ssh-agent`
ssh-add /example_path/id_rsa
sftp user@example.com:/example_backuppath/backup.zip


しかし、これをシェルスクリプトとして記録させ、
実行させると、
setenv: not found
Could not open a connection to your authentication agent.
Connecting to example.com...
user@example.com's password:

とパスワードを求められてしまいます。
スクリプトの間にsleep 10 などを入れても同じでした。


解決方法をご教授ください。


ちなみに、まったく同じ方法で、CentOS同士ならうまくいきました。
BSD特有の何かが必要なのでしょうか?

●質問者: PEPOTA
●カテゴリ:コンピュータ インターネット
✍キーワード:ADD BSD CentOS example.com NOT FOUND
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● masahikokimoto
●10ポイント

man ssh-agentしましょう。

ssh-agent -s

とすると、Bourne Shell用の出力をしてくれます。

setenvはcshの環境変数設定命令ですね。

◎質問者からの返答

ありがとうございます。

すみません。

意味がよくわからなかったので、manをしてみるのとキーワードを元に書籍で調べてみます。


2 ● tmasao
●35ポイント

「setenv: not found」と出ているということは、シェルがBSH系なのではないですか?

#!/bin/csh

をシェルの一行目に加えて、cshに実行させるか、もしくは、`ssh-agent -s`として明示的にbsh系の出力をださせた方がよいと思います。

ちなみに、CentOSで問題が出なかったのは、bashがデフォルトのシェルになっていて、スクリプト実行環境と同じ出力にssh-agent側で合わせてくれていたからでしょう。

◎質問者からの返答

なるほど。ありがとうございます。

試してみます。


3 ● masahikokimoto
●35ポイント ベストアンサー

説明不足でしたか。

eval `ssh-agent`

の部分は、ssh-agentが出力した文字列をshell script として現在のshellで実行するというものです。

この部分で、ssh-agentにアクセスするための環境変数が設定されます。

ssh-agent -cとすると、C Shell用の環境変数設定の構文を出力します。例: setenv SSH_AUTH_SOCK /tmp/hogehoge

ssh-agent -sとすると、Bourne Shell用の環境変数設定の構文を出力します。例: export SSH_AUTH_SOCK=/tmp/hogehoge

setenvが文法エラーとなっているということは、Bourne Shell Sciprtを書いているのと思われますので、ssh-agentの出力を合わせてあげれば良いことになります。

◎質問者からの返答

!!なるほど。

よくわかりました。

ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ