タグ「ssh」での検索

SSHやSFTPをパスワードなしで接続する(秘密鍵 / 公開鍵 作成方法)

ssh やSFTPをパスワードなしで接続するには次のようにします。

● 1. 【鍵の作成】接続元マシンで以下のように入力する(RSA 4096bit)

鍵ファイル名を指定して「公開鍵」「非公開鍵」2つの鍵ファイルを作成します。

ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa__mysite

(何か入力を促されますが、そのままenterを2回押します) これで 
公開鍵「id_rsa__mysite.pub」 と 
非公開鍵「id_rsa__mysite」 
が生成されます。

RSAより高速で強度の高い(Ed25519)で鍵生成する場合は

ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519__mysite

で生成します。生成ファイル名(「id_rsa__mysite」→「id_ed25519__mysite」)に変えているので、以下の文章のファイル名のところは読み替えてください。

● 2. 【RSA鍵の強度を調べる】

接続元マシンで以下のように入力します

ssh-keygen -l -f ~/.ssh/id_rsa__mysite
# または次のコマンドでもok
ssh-keygen -l -f ~/.ssh/id_rsa__mysite.pub

表示される先頭の数字がバイト数です。2048以上になっていることを確認します。

● 3. ( 接続元マシンで)【作成したRSA公開鍵をコピーする】

cat ~/.ssh/id_rsa__mysite.pub
(画面上にキーを表示してクリップボードにコピーする)

● 4. 接続先マシンにて公開鍵を設定する(転送コマンドを使用する場合)

ssh-copy-id -i ~/.ssh/id_rsa__mysite.pub [リモートユーザー]@[リモートサーバーのホスト名]

● 4. 接続先マシンにて公開鍵を設定する(手動でする場合。あらかじめsshで接続しておく)

cd
mkdir .ssh
chmod 700 .ssh
cd .ssh
touch authorized_keys
chmod 600 authorized_keys
vi authorized_keys
(ここでviから先ほどクリップボードにコピーした鍵をペーストする。)

viの保存コマンド esc:wqEnter で保存する。

なお、サーバによってはファイル名「authorized_keys2」というファイルが存在することがあります。(古いサーバです。)
気にせず「authorized_keys」に追記 します。
どちらのファイルもない場合は「authorized_keys」でOKです。

● 5. 設定完了。(接続元マシンから)秘密鍵を指定した接続を確認する

ssh  -i  ~/.ssh/id_rsa__mysite  user@xxx.yyy.zzz

なお、SSH接続の不具合を調査するときはこのように -v をつけて実行します

ssh  -v -i  ~/.ssh/id_rsa__mysite  user@xxx.yyy.zzz
No.250
09/21 13:49

edit

ssh

sshでログイン後にコマンドを実行する

sshでログイン後にシェルを変更したいときなど、SSHログイン後に何かコマンドを実行したい場合は

-t コマンド名

とします。 具体的には

SSHログイン後にbashを起動する

ssh user@hogehoge.com -t /usr/local/bin/bash
No.969
08/17 12:24

edit

ssh

SSHへのブルートフォースアタック(ID, PASS 総当たり攻撃)への対応

SSHへのブルートフォースアタック(ID, PASS 総当たり攻撃)は必ず経験する攻撃の一つです。 ブルートフォースアタックへの対応策(ID,PASSでのSSHログインを不可にする)は必ずしておきましょう。

● SSHへのブルートフォースアタックの確認

ブルートフォースアタックを受けていることを確認するにはログファイルを確認します。 まずログファイルの場所を確認し、そのログファイルを参照します。

cat /etc/syslog.conf

Fedora や CentoOSの場合下記コマンドで確認できます。

cat /var/log/secure | grep "Invalid user"
cat /var/log/secure | grep "Failed password"
cat /var/log/messages | grep "failure"

webmin で見る場合

【システム】→【システム ログ】から該当のログを表示できる

● 対応策 1. /etc/ssh/sshd_config を変更する

vi /etc/ssh/sshd_config

以下の設定を追加する

PasswordAuthentication no
ChallengeResponseAuthentication no

PermitRootLogin no        (通常 no をおすすめします)
PermitRootLogin without-password ( root で直接ログインする必要がある場合はパスワードログイン以外を許可します)

Port 22222 (デフォルトポート 22 を変更する)

sshd の再起動

service sshd stop
service sshd start

● 対応策2. /etc/hosts.deny に手動でアクセスしてほしくないホストを追加する

/etc/hosts.deny

以下を追加 (IP:123.456.789.123 からの ssh 接続を拒否する場合) (IP:999.999.999.999 からの 全ての接続を拒否する場合)

sshd: 123.456.789.123
ALL : 999.999.999.999

● 対応策3. /etc/hosts.deny にアクセスしてほしくないホストを自動追加する「denyhosts」を導入する

http://denyhosts.sourceforge.net/ から DenyHosts-2.6.tar.gz をダウンロード

tar zxvf DenyHosts-2.6.tar.gz 
cd DenyHosts-2.6
python setup.py install

# インストールが完了したらコンフィグファイルをコピーし所有者と権限を変更する
cd /usr/share/denyhosts/
cp denyhosts.cfg-dist denyhosts.cfg
cp daemon-control-dist daemon-control
chown root daemon-control
chmod 700 daemon-control

denyhosts.cfg を編集する

vi  /usr/share/denyhosts/denyhosts.cfg

設定例

# 4週間経過すると拒否対象から解除してあげる
PURGE_DENY = 4w
# 拒否解除を2回行うとそれ以降は解除しない
PURGE_THRESHOLD = 2
# 「存在しないユーザでの認証失敗5回」で拒否ホストに認定
DENY_THRESHOLD_INVALID = 5
# 「存在するユーザでの認証失敗10回」で拒否ホストに認定
DENY_THRESHOLD_VALID = 10
# 「rootユーザでの認証失敗1回」で拒否ホストに認定
DENY_THRESHOLD_ROOT = 1
# メールにて通知
ADMIN_EMAIL = your@email.address
# メールタイトルを指定する
SMTP_SUBJECT = DenyHosts Report Server( yourhost.server )

自動起動の設定をする

cd /etc/init.d
ln -s /usr/share/denyhosts/daemon-control denyhosts
chkconfig denyhosts on

denyhosts の起動

service denyhosts start

間違って自分のホストが denyhosts によって拒否された場合は

vi /etc/hosts.allow 

として 接続を許可したい IP を追加します

sshd: 123.123.123.123
No.644
03/18 23:07

edit

スパム対策
ssh