【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特有の何かが必要なのでしょうか?

回答の条件
  • 1人2回まで
  • 登録:2006/05/19 15:18:45
  • 終了:2006/05/19 16:00:39

ベストアンサー

id:masahikokimoto No.3

masahikokimoto回答回数241ベストアンサー獲得回数102006/05/19 15:44:09

ポイント35pt

説明不足でしたか。

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の出力を合わせてあげれば良いことになります。

id:keijiro

!!なるほど。

よくわかりました。

ありがとうございます。

2006/05/19 15:59:07

その他の回答(2件)

id:masahikokimoto No.1

masahikokimoto回答回数241ベストアンサー獲得回数102006/05/19 15:26:54

ポイント10pt

man ssh-agentしましょう。

ssh-agent -s

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

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

id:keijiro

ありがとうございます。

すみません。

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

2006/05/19 15:36:17
id:tmasao No.2

tmasao回答回数77ベストアンサー獲得回数202006/05/19 15:37:08

ポイント35pt

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

#!/bin/csh

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

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

id:keijiro

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

試してみます。

2006/05/19 15:58:37
id:masahikokimoto No.3

masahikokimoto回答回数241ベストアンサー獲得回数102006/05/19 15:44:09ここでベストアンサー

ポイント35pt

説明不足でしたか。

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の出力を合わせてあげれば良いことになります。

id:keijiro

!!なるほど。

よくわかりました。

ありがとうございます。

2006/05/19 15:59:07

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません