Top > ssh

基本的な概念 Edit

sshとは Edit

sshは強力なセキュリティを備えたリモートログインプログラムです。

  • 今どきのLinuxやBSDなら最初からインストールされています。
  • LinuxやBSDで使っているsshの実装をOpenSSHといいます。
  • 通信内容を暗号化します。
  • 公開鍵認証を使えます。
  • ftp、cvs、Xなど他のプロトコルをトンネル化して安全にできます。
  • WindowsでもCygwin版のsshdを使えばsshサーバを立てられます。

パスワード・パスフレーズ Edit

「パスフレーズ」というのは、秘密鍵を使うときに聞かれるもの。
パスワード認証の「パスワード」とは別ものなので注意が必要です。

鍵作成してログインできるようにする Edit

OpenSSHを使う場合 Edit

Cygwin の ssh や Linux の ssh クライアントから接続するには、以下の方法で鍵を作成・登録します。

1.鍵作成。
LinuxやCygwinなら

ssh-keygen -t rsa

このときパスフレーズを空文字列にすると、ログイン時にパスフレーズを聞かれなくなります。
Puttyを使う場合はまた違います。

2.秘密鍵 id_rsa をクライアント(接続元)の ~/.ssh に保存。

3.公開鍵をホスト(接続先)の authorized_keys に追加。

cat id_rsa.pub >> ~/.ssh/authorized_keys

4.クライアントから接続
初回のみメッセージが表示され、確認を求められます。
yes と答えると、サーバが known_hosts に追加され、以降聞かれなくなります。

いったん鍵を作ったら、他のサーバにログインするには、
id_rsa.pub をそのサーバの ~/.ssh/authorized_keys に追加するだけでOKです。
ログインするサーバごとに鍵を生成する必要はありません。

sshの鍵ファイル一覧 Edit

↓テーブルにすると正常に表示されない。なぜ?

,identity,SSHプロトコル Ver.1の秘密鍵
,identity.pub,SSHプロトコル Ver.1の公開鍵
,id_dsa,SSHプロトコル Ver.2(DSA)の秘密鍵
,id_dsa.pub,SSHプロトコル Ver.2(DSA)の公開鍵
,id_rsa,SSHプロトコル Ver.2(RSA)の秘密鍵
,id_rsa.pub,SSHプロトコル Ver.2(RSA)の公開鍵
,known_hosts,ログイン先として認めたホスト(接続元に保存)
,authorized_keys,ログインを受け付ける公開鍵(接続先に保存)

※TODO:puttyが作る鍵の名前を追加。

authorized_keysファイルのフォーマット Edit

プロトコル バージョン 1 の公開鍵では、空白で区切られた以下の項目が格納されています:

オプション、ビット数、指数、係数 (modulus)、鍵のコメント。

プロトコル バージョン 2 の公開鍵では、以下の項目が格納されています:

オプション、鍵の種類、 base64 エンコードされた鍵本体、鍵のコメント。

オプション項目はなくてもかまいません。

http://www.unixuser.org/~euske/doc/openssh/jman/sshd.html

例:

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA8cmkP3+XRNqCO54qrmclySNIS5EV6DR99tX113Dq/bBTgN1IkSywEVbbZAWgrvJBjyjWIZH3kZXLINe45FMzrL1rGUv7RZOJgNcELrr56TXSf98iUWwR+9yqZzqg7chOVord4okrHq2XiB3gR1Olg3oyh457ScUcPB4Q/OCyp3fpsbaRCfIdCVurqqS+71sIZuE7vOPNT3pdqZeKGiG48rNdK5c5HnOyPBhVbEAJ/X20GcBzmebDTSfBEc4cRqqXVwQQxk+bWojvHIi7oOWAHsT56tM5g5AhQn6AFBXA3a9QzgC+bpBVItLh2vxbATZbnCbK7SmlK1Ofu7LLCgspaQ== xxxx@global

最後の「shoutarou.aoyama@global」はコメントなので、ここにどのマシンで使う鍵なのかなどを書くことができます。

Puttyの場合 Edit

まだ書いていません。

1. puttygen.exeを起動して「Generate」ボタンを押します。

2. ダイアログが開くので、ゲージがいっぱいになるまでマウスをひたすらでたらめに動かして鍵生成します。

3. パスフレーズを入力して「Save Private Key」で鍵を保存します。

4. 公開鍵をコピペしてサーバの authorized_keys に追加します。

sshサーバ管理 Edit

サーバ起動・終了 Edit

Fedora Core の場合:

# 起動
service sshd start
# 終了
service sshd stop
# 再起動
service ssshd restart

サーバ設定 Edit

とりあえず

  • パスワード認証不可。
  • rootログイン不可。
  • プロトコルは2のみ使用(プロトコル1はやや脆弱らしい)

くらいしておけば十分かと。
ポート番号を変えるだけでスクリプト攻撃はほぼ防げるようです。

sshでファイルを転送 Edit

scp Edit

書式

scp ファイル名 [ユーザ名@]ホスト名:コピー先

例:

scp hoge global.skill.ne.jp:

rsync + ssh Edit

scp ではファイルを1個1個コピーしなければならないのに対し、rsync と組み合わせると
ディレクトリを一気にコピー/同期させることができます。

例:

$ rsync -avz -e "ssh -p SSHのポート番号 -i 秘密鍵 -l ユーザ名" コピー元ディレクトリ global.skill.ne.jp:コピー先ディレクトリ
  • /.ssh/config が読み込まれないようなので、ポート番号等がデフォルトでない場合は明示的に指定する。

内部動作:
1. ローカルで起動された rsync は
2. ssh でリモートへ login し
3. リモート側でも rsync を起動する。
4. その後、ローカルの rsync とリモートの rsync とで通信を行い、バックアップを行う。
よって、リモートでrsyncのポート(通常は873)が開いていないといけないと思われる。
(未調査)

Tips Edit

クライアント設定 Edit

「~/.ssh/config」で設定。
例:

Host global
   HostName    global.skill.ne.jp
   user aoyama
   Port 10372
   ServerAliveInterval 60

こう書いておくと、

$ ssh global

と打つだけでポート10372を使い、ユーザ名をaoyamaにして接続できます。
ServerAliveIntervalは、何もしていないとき勝手に接続が切れてしまうのを防ぐため。

その他役に立ちそうなオプション:

PubkeyAuthentication no  # 公開鍵認証を行わない。パスワード認証を使いたいのに鍵のパスフレーズを聞かれてしまうときに便利。

接続元によって.bashrcを使い分ける Edit

sshで接続するとSSH_CLIENTやSSH_CONNECTIONという環境変数が設定されます。
そこで~/.bashrcに次のように書いておくと、接続元によって設定を切り替えることができます。

# 219.101.39.210から接続しているときはUTF-8を、そうでないときはeucJPを使う。
# =~は正規表現マッチング。man bash参照。
if [[ "$SSH_CONNECTION" =~ '^219\.101\.39\.210.*' ]]; then
  export LANG=ja_JP.UTF-8
else
  export LANG=ja_JP.eucJP
fi

sshでは他にも

  • SSH_ORIGINAL_COMMAND
  • SSH_TTY
  • SSH_ASKPASS
  • SSH_AUTH_SOCK

などの環境変数が設定される。詳しくはman ssh。

リモートでコマンドを実行する Edit

Cygwinのsshを使う場合

ssh global -l aoyama ls

puttyのplinkを使う場合:

plink -load global -l aoyama ls

接続後、すぐに screen を起動する Edit

ssh -t global screen -D -RR

man ssh に書いてあるらしい。

トラブルシューティング Edit

ログインできない Edit

SSHの設定方法の質問です。
http://q.hatena.ne.jp/1149079199
より。次のことを確認してみましょう。

  • クライアント側の/etc/ssh/ssh_config、~/.ssh/configでサーバBに対する設定、~/.ssh/id_rsaの鍵が使われているかどうか
  • サーバ側の/etc/ssh/sshd_configで公開鍵認証が有効になっているかどうか、~/.ssh/authorized_keysでクライアント側の~/.ssh/id_rsaに対応する公開鍵が入っているかどうか
  • サーバ側の~/.ssh/authorized_keysのパーミッションが600になっているかどうか
  • サーバ側の~/.sshのパーミッションが700になっているかどうか
  • ssh -vでつないでうまくいっているサーバへの接続と失敗するサーバへの接続を比較する。
  • ssh -vでわからなければssh -vvやssh -vvvなどと-vを増やして試してみる。
  • サーバの/etc/ssh/sshd_configでLogLevelをVERBOSEにして再起動してみる。

妙に接続が遅い Edit

sshdが接続元の名前を解決しようとしている(しかしできない)という場合は接続が遅くなります。
サーバの /etc/hosts に接続元を書いておくか、sshd_configにUseDNS noと書いて名前解決しないようにsshd_configに書いておくと解決します。
ただしUseDNSはsshd 3.7あたりから導入されたようで、古いsshdでは使えません。



URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup Referer   Help   RSS of recent changes