nEST's SPACE-Blog

    コンピュータ、ミニベロ、旅行などが主なテーマの日記帳です

    SSH公開鍵認証を設定して、SCPコマンドをシェルで自動実行させる方法


    相変わらず手探り状態なLinuxのメモ。
    今回は「SSHを使用してのファイルコピーをシェルに記述、Crontabで自動実行させた」時のお話。



    ●確認環境:CentOS 6.3

    SCPコマンドを使用すると、SSHを使用してのファイルコピーが行える(SCPコマンドの詳細はリンク先:scpコマンド参照)。

    ただし公開鍵認証を設定していない場合、SSH接続をパスワード認証(ログイン画面とかでお馴染みのユーザー名/パスワード方式)で行うため、下のように接続先サーバーのユーザー名を毎回、必ず手動で入力する必要がある。
    # scp '/root/test.txt' user1@192.168.XXX.XXX:'test.txt'
    user1@192.168.XXX.XXX's password: 
    test.txt              100%   19     0.0KB/s   00:00
    そのため、パスワード認証方式だとシェル等にSCPコマンドを書いても自動実行はできない。
    そこで、「パスフレーズ無しの公開鍵認証を設定して、SSH接続を自動化する方法」の出番となる。
    (EXPECTコマンドを使う方法もあるらしいが、シェル等にパスワードを平文で記述するのはどうかと思う)

    今回の作業フローは下記の通り。
    1. クライアントで公開鍵・秘密鍵の鍵セットを作成する

    2. クライアントで作成した公開鍵をサーバーへコピーする

    クライアントで公開鍵・秘密鍵の鍵セットを作成する


    下記コマンドを実行して、RSA暗号方式の鍵を作成する。
    今回はパスフレーズを含め、全てEnterキー連打で処理を進めた。

    ※パスフレーズを入力すると、SSHログインを自動化できても今度はパスフレーズを手動入力しないといけなくなるので注意。
    # ssh-keygen -t rsa
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa): 
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in /root/.ssh/id_rsa.
    Your public key has been saved in /root/.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@localhost
    The key's randomart image is:
    +--[ RSA 2048]----+
    |AAのような何かが表示される|
    +-----------------+
    完了後、公開鍵「/root/.ssh/id_rsa」、暗号鍵「/root/.ssh/id_rsa.pub」が作成されている事を確認する。
    root以外のユーザーの場合は「/home/[ユーザー名]/.ssh」以下を確認すること。
    なおRealVNCを使用してGUIで表示する際は、「隠しファイルを表示する」をONにするまで「.ssh」ディレクトリ自体が表示されなかった。
    # cd /root/.ssh/
    # ls
    id_rsa  id_rsa.pub
    /root/.ssh/ディレクトリを、root(=所有者)以外は何もできないように権限を変更する。
    # chmod 600 /root/.ssh/id_rsa
    # chmod 700 /root/.ssh/

    2.クライアントで作成した公開鍵をサーバーへコピー


    クライアントで作成したid_rsa.pub(後のauthorized_keys)を、SCPコマンドでサーバー側に転送する(今回は社内環境で通信してるから問題無いが、可能ならUSBメモリとかネットワークを介さない方法が望ましいとの事)。
    完了後、クライアントの/root/.sshにknown_hostが作成される。
    # scp '/root/.ssh/id_rsa.pub' root@192.168.YY.YY:'id_rsa.pub'
    The authenticity of host '192.168.YY.YY (192.168.YY.YY)' can't be established.
    RSA key fingerprint is XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '192.168.YY.YY' (RSA) to the list of known hosts.
    root@192.168.YY.YY's password: 
    id_rsa.pub                               100%  396     0.4KB/s   00:00    
    クライアント側の作業はここまで、これからはサーバー側での作業となる。
    クライアントからコピーしたid_rsa.pubを「/root/.ssh/id_rsa.pub」へ配置、認証リストファイル:authorized_keysを作成。
    # cat /root/id_rsa.pub >> /root/.ssh/authorized_keys
    # chmod 600 /root/.ssh/authorized_keys
    # chmod 700 /root/.ssh/

    ここまで完了した後、クライアントからSCPコマンドを実行した際にパスワード要求されなくなれば成功。
    最終的にはクライアント側でSCPコマンドを記述したシェルが、Crontabで定期実行される事を確認して完了した。

    SSHの設定ファイル(/etc/ssh/sshd_config)でauthorized_keysの場所とか決められるので、上手くいかない場合はファイルの権限と合わせて確認する、SSHサービスを再起動等を試す。


    ●参考

     
     
    関連記事
    スポンサーサイト
    1. 2015/02/08(日) 13:48:52|
    2. Linux
    3. | トラックバック:0
    4. | コメント:0
    <<スマホケースを新調した、ニヤリとした | ホーム | iconvコマンドなど、Windows機種依存文字をLinuxへ取り込む際の対応>>

    コメント

    コメントの投稿


    管理者にだけ表示を許可する

    トラックバック

    トラックバック URL
    http://nestblog.blog.fc2.com/tb.php/96-11c68c32
    この記事にトラックバックする(FC2ブログユーザー)

    プロフィール

    管理人NEST

    Author:管理人NEST
    nEST's SPACEへようこそ。
    書きたい事を適当に書き連ねています。
    HPもよろしく。

    最新記事

    最新コメント

    最新トラックバック

    月別アーカイブ

    カテゴリ

    未分類 (1)
    GAME (20)
    雑記 (44)
    PostgreSQL (5)
    Windows (35)
    サイト運営 (6)
    MANGA (1)
    スマートフォン (19)
    Oracle (3)
    健康 (2)
    Linux (14)
    仮想化 (2)
    車 (7)
    ミニベロ (8)
    自転車旅行 (2)
    自転車パーツ・ウェア (1)
    自転車イベント (2)

    ブログ用カウンター

    検索フォーム

    RSSリンクの表示

    リンク

    このブログをリンクに追加する

    Powered By FC2ブログ

    今すぐブログを作ろう!

    Powered By FC2ブログ