OpenSSH

読み:オープン・エスエスエイチ
外語:OpenSSH 英語
品詞:商品名

SSHプロトコルの実装の一つで、BSDライセンスに基づくフリーソフトウェアとして利用・配布されているもの。

目次

OpenBSDプロジェクトによって開発されているオープンソースのSSH実装で、SSH実装の代表例である。

OpenSSHは、SSHバージョン1.3、1.5(SSH1)と、2.0(SSH2)のプロトコルに対応し、かつsftpのクライアントとサーバーに対応している。

OpenSSHでは、rlogin/telnetの代わりのssh、rcpの代わりのscp、ftpの代わりのsftpというクライアント側ソフトの一式を含み、さらにサーバー側のパッケージsshdや、ツールssh-add、ssh-agent、ssh-keysign、ssh-keyscan、ssh-keygen、sftp-serverなどを含む。

移植

OpenSSHは、OpenBSD 2.6に初めて搭載された。以降、主としてOpenBSDを対象に開発が続いているが、他のプラットフォーム版もOpenSSH移植チーム(The OpenSSH Portability Team)によってメンテナンスされており、こちらは「Portable OpenSSH」という名で配布されている。

本家と移植版はバージョン番号で区別される。末尾のほうにp1のように「p」サフィックスが付くのが移植版で、例えば4.4を元に移植された最初の版は4.4p1のようになる。

動作環境

移植という作業があるためバージョンの新旧はあるが、実に様々なUNIX互換OS上で動作する。

知られる範囲では、次の環境で動作する(OpenBSD以外はアルファベット順)。

現在、移植が表明されている環境は、AIX、HP-UX、IRIX、Linux、NeXT、Solaris、OS X、Cygwinの8プラットフォームである。

性能

OpenSSHがよく使われている理由は、フリーであるだけでなく、その性能にもよる。

様々な機能が搭載されているが、特に有用なものだけでも、次のようなものがある。

OpenSSHには、意外と「嫌な感じのハマりポイント」があり、その原因究明が困難で無駄な時間を消耗し、解決後は不快な気分になりがちである。

ここでは「ホスト認証」をしたい場合の、簡単な設定方法と、注意点などを述べる。

想定環境

説明にあたり、想定する環境を次に示す。

  • chost ‐ ログインする側のホスト(クライアント)
  • shost ‐ ログインされる側のホスト(サーバー)
  • user1 ‐ chost、shostの双方に存在する、ホスト認証用ユーザ
  • user1のホームディレクトリ ‐ /home/user1

サーバーの設定

sshdの設定を確認および変更する。

  • sshd設定ファイルの場所 ‐ /etc/ssh/sshd_config

特に重点的にチェックすべき項目は、次の通り。

  • Protocol 2,1

    これは標準の設定なので、特に変更は必要ない。どちらか決めうちで使いたい場合は、ssh2なら2、ssh1なら1のみを書く。

    よく、「2,1とすると2が優先される」といった記述が公然と見られるが、嘘である。1,2と書いても2,1と書いても動作は変わらない。なぜなら、1か2かを選択するのはサーバー側ではなく、クライアント側だからである。

  • PasswordAuthentication no

    「パスワード無し」のホスト認証にしたい場合のみ、ここをnoにする。それ以外ではyesとする。

  • PermitEmptyPasswords yes

    「パスワード無し」のホスト認証にしたい場合のみ、ここをyesにする。それ以外ではnoとする。

  • PermitRootLogin no

    rootのログインを許可するかどうかの設定であるが、標準はnoである。

    そもそも、ホスト認証でrootがログインする必要性自体皆無であり、そのような運用は全く推奨できない。

基本的には、このくらいを押さえておけば問題なく運用できるはずである。もしファイル名やディレクトリ名を変更して運用する場合は、その設定も行なうこと。

サーバー準備

shostで続いて環境整備を行なう。user1でログインして行なう。基本作業を書くが、既にディレクトリがある等の場合、省略可能なものもある。

cd /home/user1

mkdir .ssh

chmod 700 .ssh

.sshディレクトリは、くれぐれもuser以外の+wパーミッションを立てないこと(+rや+xは良いので、755でも可)。さもないと認証で蹴られ、謎のログイン不能状態に悩むことになる。

クライアント側設定

クライアントで鍵を作り、公開鍵をサーバー側へ渡す必要がある。その方法は様々あるので、やりやすい方法を選択するべきであろう。

まずは、chostでの設定。user1でログインして行なう。

ssh-keygen -t dsa

このコマンドを使うと、DSAの鍵が作られる。RSAを使いたい場合は「-t rsa」とすればよい。もしSSH1のRSAが使いたいなら、「-t rsa1」である。

実行すると、次の三つのプロンプトが表示されるが、全てそのままEnterを押せばよい。ホスト認証の場合、大抵はパスワード無しでログインしたいケースであろうから、ここを空にするのである。

Enter file in which to save the key (/home/user1/.ssh/id_dsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

実行すると、一番目のプロンプトに書かれた場所に鍵が作られる。この場合は、/home/user1/.sshの中に、id_dsaという秘密鍵と、id_dsa.pubという公開鍵が出来る。

次にすることは、公開鍵id_dsa.pubをサーバーに送る作業である。

scp id_dsa.pub shost:/home/user1/.ssh/id_dsa.pub

scpが使えない場合は、サーバーにログインし、viなどを使って編集すると良いだろう。クライアント側でcat id_dsa.pubなどとして表示し、それをクリップボードにコピー、サーバー側でペーストすればよい。

設定完了

これで一通りの設定は完了した。

マシンを再起動するか、rootにsuして次のコマンドでsshdを再起動する。

/etc/rc.d/init.d/sshd restart

違う場所に置かれている場合は、適時対応すること。これが、停止、起動ともにOKとなれば再起動に成功している。

いよいよログインすることになる。

ssh host1

これで、パスワード無しでログインできたはずである。

ここで最もよく目にするエラーは、次のようなものである。

Permission denied (publickey,keyboard-interactive).

括弧の中は設定により変わるので、あまり気にする必要はない。この原因にはいくつかある。

最も単純なものは、鍵ファイルそのものが無い。次の盲点は、.sshのパーミッションの設定が甘い。特に.sshのパーミッションは分かりにくいので気をつけられたい。

どうしても見つからない不具合は、クライアント側で-vオプションをつけたり、サーバー側ではsshd_configの設定を「LogLevel DEBUG3」とし、syslogで結果を確認する、などがある。

関連するリンク
OpenSSH
用語の所属
SSH

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club