機能・要件
 構成・方式
 タスク
    ログイン
    ホスト認証
    ユーザ認証
    ssh
    scp
    sftp
    SSHクライアント
    ssh-keygen
    TCPWrapper
    SSHポートF
    バージョンなど
 導入

 ログイン
 ・クライアント上で秘密鍵と公開鍵ペアを生成する。
 ・公開鍵をサーバに登録する。
 ・クライアントからサーバにログインする。
 ・ホスト認証

 ホスト認証  (フィンガープリントの確認)
 ・サーバーのSSHサービスが起動している。
# systemctl is-active sshd
 ・ファイアウォールでSSHが許可されている。
# firewall-cmd --list-all
 ・TCP Wrapper でSSH が拒否されていない。
# vi /etc/hosts.deny
 ・ホスト認証の公開鍵(公開鍵暗号方式はECDSAの場合)のフィンガープリントを表示
# ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key
 ・~/.ssh/known_hosts が既に存在する場合は削除(フィンガープリントだけでも良い)
$ rm ~/.ssh/known_hosts
 ・サーバーにログイン、表示されたフィンガープリントが、控えと一致を確認
パスワードを入力してログイン
 ・ログアウト、~/.ssh/known_hosts にホスト認証の公開鍵が登録されている
$ cat .ssh/known_hosts

 ユーザ認証  (ユーザ認証に公開鍵認証)
 ・公開鍵暗号方式を使用してユーザ認証(パスワードがネットワークに流れない。)
 ①サーバで公開鍵認証を許可
設定ファイル/etc/ssh/sshd_config
PubkeyAuthentication yes
 ②クライアントでユーザ鍵(公開鍵・秘密鍵)を作成
$ ssh-keygen
秘密鍵にパスフレーズを設定すると、使用時にパスフレーズの入力が必要
(運用効率が下がる。)
クライアントで、作成したユーザ鍵を確認
$ ls -l .ssh
 ③クライアントのユーザーの公開鍵をサーバーにコピー
$ scp ~/.ssh/id_rsa.pub user1@192.168.xx.xx:~/
 ④コピーしたユーザ公開鍵を、サーバのユーザーの~/.ssh/authorized_keysに追記
$ cat id_rsa.pub >> .ssh/authorized_keys
 ⑤~/.ssh/authorized_keysのパーミッションを600に設定
$ chmod 600 .ssh/authorized_keys
 ⑥クライアントからサーバにログイン
$ ssh user1@192.168.xx.xx
パスフレーズはクライアントで秘密鍵を使用するために必要なだけ
 ※サーバに.sshディレクトリがない場合は作成
# mkdir .ssh
# chmod 700 .ssh/

 ssh  (OpenSSHのクライアントを操作)
 ・指定したホストに指定したユーザでログインを試みる。
 ・ユーザ名を省略すると、コマンドを実行したユーザと同じユーザ名が指定
 ・書式
ssh [ユーザ名@]ホスト

 scp  (セキュアコピー)
 ・リモートホストからまたはリモートホストにファイルをコピー
 ・ユーザ名を省略すると、コマンドを実行したユーザと同じユーザ名が指定
 ・書式
 ・リモートホストからローカルへ
scp [ユーザ名@]ホスト:パス名パス名
 ・ローカルからリモートホストへ
scp パス名[ユーザ名@]ホスト:パス名

 sftp  (ftp コマンドと同様)
 ・$ sftp [-oPort=ポート番号] [ユーザ名@]ホスト名[:ディレクトリ名]
 ・mget/mputサブコマンドによる複数ファイルの転送ができない。

 SSHクライアント
 ・SSHクライアント
 ・Windowsからのリモートアクセス
TeraTermなどのSSHクライアントを使用で、Windowsからリモートアクセスできる。

 ssh-keygen  (公開鍵・秘密鍵の管理)
 ・公開鍵・秘密鍵の生成、管理、変換を行う。
 ・書式
ssh-keygen [オプション]
$ ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub
$ ssh-keygen -lv -f /etc/ssh/ssh_host_rsa_key.pub
 ・オプション
       -t 暗号化方式   暗号化方式を指定する。(省略するとRSAが指定される)
-f 鍵ファイル名   鍵のファイルを指定する。
-l   公開鍵のフィンガープリントを文字列で出力する。
-lv   公開鍵のフィンガープリントを文字列とASCIIアートで出力する。
 ・ホスト鍵を生成しなおす場合
# ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
過去にリモートアクセスしたクライアントからリモートアクセス
中間者攻撃で盗聴を受けている可能性がある、という警告が表示
~/.ssh/knownhostsファイルの削除で、初回接続の状態からやり直す。

 TCPWrapperの設定
 ・SSHの接続を許可するクライアントの登録「/etc/hosts.allow」
 ・設定
 ・TCP Wrapperを使用の場合、SSH が拒否されていないこと。
~]# vi /etc/hosts.deny

 SSHポートフォワーディング
 ・(例:LinuxのsshクライアントがPOPサーバーと暗号化通信)
$ ssh -L 1024:pop3.sectest.jp:110 -l tanaka ssh.sectest.jp
(1024以降の任意ポート、接続先とポート、アカウントw定、中継SSHサーバー)
SSHクライアントはSSHサーバーとの間に暗号化のトンネルを作成
クライアントはlocalhostへ接続
SSHクライアントからSSHサーバーへ暗号化パケット転送
SSHサーバーからPOPサーバーへ無暗号化パケット転送
 ・ポートフォワーディング(ローカルフォワード)
$ ssh -L <ローカルポート番号>:<転送ホスト>:<転送ポート><リモートホスト>
ローカルホストの指定ポートへ来た接続を、トンネル経由でリモートホストへ渡し、
さらにそのホストから到達可能な指定ホストのポートへ転送
 ・ポートフォワーディング(リモートフォワード)
$ ssh -R <リモートホストのポート番号>:<転送先ホスト>:<転送先ポート><リモートホスト>
リモートホストの指定ポートへ来た接続を、トンネル経由でローカルホストへ渡し、
さらにそのホストから到達可能な指定ホストのポートへ転送
自社LANが外部からのSSH接続を許可していない場合、
外部から接続したい場合に、リモートフォワードを内部から確立
 バージョンなど
$ which ssh (sshのパス名)
/usr/bin/ssh
$ ssh -V (sshクライアントのバージョン)
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
$ rpm -qa | grep -i openssh
openssh-server-7.4p1-21.el7.x86_64
openssh-clients-7.4p1-21.el7.x86_64
openssh-7.4p1-21.el7.x86_64