• 締切済み

ssh-agent sh -C 'ssh-...

ssh-agent sh -C 'ssh-add < /dev/null && bash' の中の" < /dev/null && bash"の部分で何をやっているのかがわかりません。 前半は「ssh-agentを起動し、sh上で'ssh-add < /dev/null && bash'を実行する」と理解してします。 尚、上記は『Railsデプロイ』(p.61)から抜粋しました。「こうすると、以降はパスフレーズを入力しなくても鍵が置かれているサーバにSSH接続できるようになります」と書かれています。 よろしくお願いします。

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

shの文法として A && B とすると、 ・Aが成功(終了ステータス0)したらBを実行 ・Aが失敗(終了ステータス0以外)したらBは実行しない となります。 この例なら A: ssh-add < /dev/null B: bash です。

mathfuru
質問者

補足

ありがとうございます。 だとすると、shを起動して、さらにbashも立ち上げるという事だと思うのですが、これにはどういう意味があるのでしょうか。

関連するQ&A

  • bashのaliasに引数を渡すには?

    sshでログインしたubuntuサーバー上で時間のかかるシェルスクリプト(例えば hoge.sh) を実行した後、sshから抜けてもプロセスを走り続けさせるためにnohupを使っています。 nohup hoge.sh > out.log 2> err.log < /dev/null & これはタイプ量が多いし、時間のかかるシェルスクリプトはhoge.shだけではないので、実行したいシェルスクリプトの名前の部分を引数にした下記のようなエイリアスを作りたいのですが、bashのaliasには引数が渡せないとの事です。 alias run='nohup $1 > out.log 2> err.log < /dev/null &' "alias 引数"で検索すると「関数を使うと良い」というページがいくつか見つかりますが、関数ではsshから抜けると終了してしまいます。どうするのが良いでしょうか?

  • SSHの公開鍵について

    お世話になっております。 現在3台のサーバA,B,Cがあり、AのサーバからB,Cにパスワードなしでログインできるようにするため、 AのサーバでSSHの公開鍵と秘密鍵を作成しました。(パスフレーズはnull) 具体的な手順は以下になります。 ------------------------------------------------------------------------------------------- 1. Aサーバにて公開鍵と秘密鍵を作成 A # ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (//.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in //.ssh/id_rsa. Your public key has been saved in //.ssh/id_rsa.pub. The key fingerprint is: xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx root@A 2. 秘密鍵、公開鍵が作成されていることを確認 A # ls ~/.ssh id_rsa id_rsa.pub known_hosts 3. 公開鍵をBとCサーバへ配信 A # scp ~/.ssh/id_rsa.pub root@B:/tmp Password: id_rsa.pub 100% |***************************************| 223 00:00 4. BとCサーバ側で公開鍵の登録 B # cat /tmp/id_rsa.pub > ~/.ssh/authorized_keys ------------------------------------------------------------------------------------------- 登録後、AサーバからB,CサーバにSSHで接続してみたのですが、一見パスワードなしでログインできているようでした。 ただ、何故か B,Cサーバや無関係なDサーバからもAサーバへパスワードなしでアクセスできてしまいます。 公開鍵を登録したのはB,Cサーバのみで、B,CサーバからAサーバに対してパスワードなしでアクセスできないはずという認識です。 更に、数日後AサーバからB,Cサーバに接続を試みたところ、以下のメッセージが出力されました。 ------------------------------------------------------------------------------------------- ホスト 'B (1.1.1.1)' の認証を確立できません. RSA 鍵フィンガープリントは xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx です 本当に接続を継続してもよろしいですか (yes/no)? ------------------------------------------------------------------------------------------- 公開鍵はBサーバ初回接続時にknown_hostsへ登録済みで、Bサーバ側のIPアドレスの変更なども実施していません。 SSHの仕様で、公開鍵が数日で変更されるのでしょうか? 上記について、アドバイスや問題点があればご教示いただければ幸いです。

  • SSHに繋がらない

    SSHから接続できず、ユーザー認証でエラーになってしまいます。 何かわかる方がいらっしゃいましたら、どうか少し教えて頂けないでしょうか。 OSはCentOS 6.2 です。 -------------------------------------------------------------------- ■サーバー -------------------------------------------------------------------- ★設定 # vi /etc/ssh/sshd_conf > Port 22 > Protocol 2 > AllowTcpForwarding yes > GatewayPorts no > MaxAuthTries 6 > MaxSessions 10 > > ServerKeyBits 1024 > StrictModes yes > > SyslogFacility AUTHPRIV > LogLevel DEBUG3 > > PubkeyAuthentication yes > PasswordAuthentication no > PermitEmptyPasswords no > AuthorizedKeysFile .ssh/authorized_keys > > PermitRootLogin without-password > UsePrivilegeSeparation yes > > Subsystem sftp /usr/libexec/openssh/sftp-server > X11Forwarding no ★鍵を作成 # su user1 $ ssh-keygen -t rsa -b 1024 $ Generating public/private rsa key pair. $ Enter file in which to save the key (/user1/.ssh/id_rsa): $ Enter passphrase (empty for no passphrase): $ Enter same passphrase again: $ Your identification has been saved in /user1/.ssh/id_rsa. $ Your public key has been saved in /user1/.ssh/id_rsa.pub. $ The key fingerprint is: $ 50:4f:72:d4:0a:d6:d2:24:98:96:7b:xx:xx:xx:xx:xx user1@myhost.com $ The key's randomart image is: ★鍵の名前を変更 $ cd /home/user1/.ssh/ $ cp id_rsa.pub authorised_keys $ rm id_rsa.pub ★パーミッション確認 $ drwxr-xr-x. root root /etc/ssh $ -rw------- root root /etc/ssh/sshd_conf $ drwxr-xr-x. user1 user1 /home/user1 $ drwxr-xr-x user1 user1 /home/user1/.ssh $ -rw-r--r-- user1 user1 /home/user1/.ssh/authorised_keys ★再起動 # service sshd restart # Stopping sshd: OK ] # Starting sshd: OK ] -------------------------------------------------------------------- ■クライアント -------------------------------------------------------------------- Windows7 teraterm ポート:22 SSHバージョン:SSH2 ユーザー名・パスフレーズを入力し、「RSA/DSA鍵を使う」に上記で作った「id_rsa」プライベート鍵をセット。 エラーメッセージ:「SSH2自動ログインエラー:ユーザー認証が失敗しました」 -------------------------------------------------------------------- ■ ログ(/var/log/secure)抜粋 -------------------------------------------------------------------- Aug 6 17:57:26 localhost sshd[21819]: debug1: temporarily_use_uid: 0/0 (e=0/0) Aug 6 17:57:26 localhost sshd[21819]: debug1: trying public key file /user1/.ssh/authorized_keys Aug 6 17:57:26 localhost sshd[21819]: debug1: restore_uid: 0/0 Aug 6 17:57:26 localhost sshd[21819]: debug1: temporarily_use_uid: 0/0 (e=0/0) Aug 6 17:57:26 localhost sshd[21819]: debug1: trying public key file /user1/.ssh/authorized_keys Aug 6 17:57:26 localhost sshd[21819]: debug1: restore_uid: 0/0 Aug 6 17:57:26 localhost sshd[21819]: Failed publickey for user1 from yyy.yyy.yyy.yyy port 58193 ssh2 Aug 6 17:57:26 localhost sshd[21819]: debug3: mm_answer_keyallowed: key 0x7fc196d47cf0 is not allowed Aug 6 17:57:26 localhost sshd[21819]: debug3: mm_request_send entering: type 22 Aug 6 17:57:26 localhost sshd[21819]: debug3: mm_request_receive entering Aug 6 17:57:26 localhost sshd[21820]: debug2: userauth_pubkey: authenticated 0 pkalg ssh-rsa Aug 6 17:57:26 localhost sshd[21820]: debug3: Wrote 68 bytes for a total of 2633 Aug 6 17:57:26 localhost sshd[21820]: Connection closed by yyy.yyy.yyy.yyy ※yyy.yyy.yyy.yyyは、teratermでアクセスしたIPです。 -------------------------------------------------------------------- ■備考 -------------------------------------------------------------------- 「nmap localhost」は「22/tcp open ssh」ですが、 グローバルIPで「nmap xxx.xxx.xxx.xxx」すると、22番がリストに出ませんでした。 ルーター、iptables、ともにポートは開けています。 (念のため、「iptables」と「system-config-firewall」は停止しています。) ログを見ると、sshdまで到達しているように見えるのですが・・・。

  • 4つのPC間の通信を制約なしで行う設定

    4つのLinuxマシン(Fedora)の間でsshによるコマンド入力による通信をパスワード入力の手間をかけることなくスムーズに行うように設定する方法を知りたいのですが。 公開鍵・秘密鍵の保管場所を指定しておくとか、パスワードを記録しておくとか、いろいろなことがあると思います。ある種の設定が必要らしいです。ssh-keygen, ssh-agent, ssh-addなどのコマンド群を入力していくことなどだろうと思います。ガイド本に載っている方法を一通りやってみたのですが、それでもうまく行きませんでした。ひょっとしてsshによって実際に接続してみる必要があるのでしょうか。4台のPCだったら、12の組み合わせがあるのでそれを一つ一つsshによる接続を実際に行って確立していくのでしょうか。putty, winscpのようなウィンドウズの通信ソフトでは、とにかく一度接続すればその後はスムーズに動作します。それと同じでしょうか。 よろしくお願いします。

  • expectでscpのパスフレーズ入力を自動化

    別サーバーに存在するファイルを、scpでダウンロードしています。 これをcronを使用して自動実行させたいのですが、パスフレーズ入力の自動化で悩んでいます。 expectを使ってみましたが、以下のようにエラーもなく、反応でした。 expectの書き方が悪いのだと思いますが、ご教授いただけましたら助かります。 ○やりたいこと サーバーA(linux)から、サーバーB(linux, 192.168.1.100)のファイルをデイリーで自動ダウンロードしたい。 以下のtest.shを作って実行してみましたが、エラーも無く無反応です。 expectは導入されています。 ○環境 ・サーバーAからサーバーBへは、SSHでアクセスできる。 ・秘密鍵を/home/testuser/.ssh/に置いている。  ・サーバーBへは、パスフレーズを入力するだけでsshでログインできる。 ・パスワードでの認証はdisable ■手入力では、このようにファイルをダウンロードできています。 $ scp 192.168.1.100:/home/testuser/test.txt ./ Enter passphrase for key '/home/testuser/.ssh/id_dsa': ★ここでパスフレーズを手入力★ test.txt 100% 5 0.0KB/s 00:00 ■test.sh ----------- #!/bin/sh FILE=192.168.1.100:/home/testuser/test.txt TARGET=/home/testuser/ PASSWORD=hogehoge expect -c " set timeout 20 spawn scp $FILE $TARGET #expect \"Enter passphrase for key '/home/testuser/.ssh/id_dsa':\" ; #send \"$PASSWORD\r\"; " ■実行結果(エラー表示無し。ファイルはダウンロードされない) $ sh test.sh spawn scp 192.168.1.100:/home/testuser/test.txt /home/testuser/ $ 以上、よろしくお願いします。

  • Linux シェルの trap について

    お世話になります。 シェルについて、どなたかご教授頂けますと幸いで御座います。 以下、★処理を実施していますが、シェル.sh を実行中に Ctrl+\ で終了(シグナル)しても トラップ処理が実行されません。"| tee -a ファイル名" を削除し、シェル.sh のみ実行すると、 トラップ処理が実行されます。何か、良いアイデアは御座いますか?? ******************************************************* #!/bin/bash #------------------------------------------------------------------------------ # Trap #------------------------------------------------------------------------------ trap 'echo "trapped."; トラップ処理 >> /dev/null 2>&1;exit 1' 1 3 15 trap '' 2 umask 022 : <中略> : #------------------------------------------------------------------------------ # main #------------------------------------------------------------------------------ シェル.sh | tee -a ファイル名 ★ #シェル.sh *******************************************************

  • HP-UXにopensshでパスワード無しログイン

    ローカル(A)からリモート(B) にsshでパスワード無しの自動ログインをしようとしています. A:RedHat Linux 9, B:HP-UX(B.11.11) ○現状 ・Aにはrpmでopenssh-clients-3.5p1-11がインストールされています. ・Aにおいて,ssh-keygen -t dsa でパスフレーズ無しの鍵ペアを~/.ssh以下に作成 ・Aで作成した~/.ssh/id_dsa.pubをBの ~/.ssh/ 以下に authorized_keys としてコピー 関連ファイル,ディレクトリのパーミションはA,B共に以下のとおり. ~/.ssh/(700) ~/.ssh/id_dsa(600) ~/.ssh/id_dsa.pub(644) ~/.ssh/authorized_keys(644) Bには以下の手順でopenssl, openssh をインストール後,/usr/local/sbin/sshd でsshdを起動してあります.設定ファイルは変更していません. ・openssl-0.9.6c ./config && make && make test && make install ・openssh-3.7.1p2 ./configure && make && make install ○問題 AからBにsshで接続するとパスワードを聞かれてしまう. Bにopensshをインストールした際,何か,configure オプションや必要なライブラリが不足したりしているのでしょうか?

  • シェルからssh接続

    お世話になります。 現在、シェルからssh接続してファイルの存在確認を行いたく以下のようなシェルを作成したのですが、 上手く動作できなく困っております。(ssh接続したところで動きが、とまります。) 解決策が、わかる方がいらっしゃいましたらご教授願えますでしょうか。 私の使用している環境は、接続元・接続先ともにcentOS5.5です。 公開鍵を設定し以下のようにノンパスワードでログインできる事は、確認しております。 [root@localhost ~]# ssh 192.xxx.xxx.xxx Last login: Sun Jan 8 16:45:13 2012 from 192.168.1.250 [root@localhost ~]# ※以下のシェルは、javaのテストプログラム数文を実行しテストで出力するファイルの存在チェック  を行っています。 #!/bin/sh FILEDIR=/usr/local/test JAVADIR=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin TESTDIR=/temp/Test_pro INPUTDIR="${TESTDIR}/input" WORKDIR="${TESTDIR}/work" JARFILE="${TESTDIR}/Test.jar" PROFILE="${TESTDIR}/set.property" REMOTEHOST=192.xxx.xxx.xxx #FILEDIR内のディレクトリを削除 rm -Rf ${FILEDIR}/* TESTTARGET=`find ${WORKDIR} -type f | sort -r` for FILE in ${TESTTARGET} ;do echo "${FILE} START " #テスト対象プロパティファイル削除 & 移動 cd ${INPUTDIR} rm -f ./* cd ${WORKDIR} cp -p ${FILE} ${INPUTDIR} #実行環境へ移動 cd ${JAVADIR} #実行 java -jar ${JARFILE} ${PROFILE} echo "192.xxx.xxx.xxx" `ifconfig` LOGIN=`ssh ${REMOTEHOST}` echo ${LOGIN} echo "192.xxx.xxx.xxx" `ifconfig` #ファイル作成確認 cd ${FILEDIR} FILECNT=`find ./ -name [0-9]* | wc -l` if [ ${FILECNT} -eq 1 ] ; then DIRNAME=`ls` echo "FILE MAKE " ${DIRNAME} mv ${DIRNAME} ${FILE]} echo "FILE RENAME " ${FILE} else echo "FILE NOT MAKE " fi echo "${FILE]} END " done お手数お掛け致しますが、よろしくお願い致します。

  • Perlについて

    あるテキストファイルからディレクトリだけを抜き出して各ディレクトリにパーミッションをつけたいのですがやりかたはシェルスクリプトでやろうとかんがえています。 #!/usr/bin/bash while read x1 x2 x3 x4 x5 x6 x7 x8 x9 ; do echo $x1 | grep ^d > /dev/null 2>&1 if(($?==0));then echo mkdir -p $x9 fi done < file.txt とディレクトリを作るところからパーミッションはどう書けばわかりません。当方初心者なのでわからないことがおおいです。 ご教授お願いします。 ~

  • レンタルサーバー(XREA)はTelnet接続できない?

    下記レンタルサーバーにてCGI設置を試みてますが、どうしてもTelnet接続ができません。WindowsXP(Pro)使用 http://www.xrea.com/ C:\>telnet www.s**.xrea.com(リターン)で下記メッセージにより接続失敗します。 接続中:www.s**.xrea.com...ホストへ接続できませんでした。ポート番号 23:接続に失敗しました。 他のサーバーでは接続成功してますので手法は間違いないと思います。 Q1:XREAはTelnet接続に対応してないのでしょうか? Q2:もしそうだとするとSSHによる接続が必要でしょうか?SSHの事は全くわかりません。 Tera Term Professional Version 4.20をダウンしたばかりで少し操作してみたところ「www.s**.xrea.comにログインしてます。認証が必要です」というメッセージがでます。 下記箇所は何を入力すればいいのでしょうか? ユーザー名(N): パスフレーズ(P): また、以下のラジオボタンで何を選択すればよいのでしょうか? ○プレインテキストを使う(L) ○RSA/DSA鍵を使う 秘密鍵(K) ○rhosts(SSH1)を使う ローカルのユーザー名(U): ホスト鍵(F): ○チャレンジレスポンス認証を使う(キーボードインタラクティブ)(C) telnet接続もしくはSSHはCGIの動作確認(***.plのコマンド実行)のみに使うだけです。