telnetとopenssh


一、telnet
telnetは、ローカルコンピュータにリモートホストにログインして作業する能力を提供するリモート接続プロトコルです.明文転送メッセージを採用しているため、セキュリティが悪く、sshに取って代わられています.
telnetツールはtelnetプロトコルのオープンソース実装であり、C/Sアーキテクチャに基づいている.
server:telnet-server,23/tcp、そのサービスプロセスはtelnetd、瞬時ガードプロセス、スーパーガードプロセスxinetdによって管理されます.
telnetサービス側はデフォルトで管理者として直接ログインすることは禁止されていますが、一般ユーザーとしてログインしてから管理者にsuすることができます.
     client:telnet
telnetクライアントプログラムの使い方は:
           telnet remote_host[port]例えばtelnet 192.168.30.20
telnetコマンドは、リモートホストにログインするだけでなく、リモートホストのポートにアクセスできるかどうかを決定します.
例telnet 192.168.30.20 80
二、ssh
ssh(secure shell、セキュアシェルプロトコル)は、アプリケーション層と伝送層に基づいたセキュリティプロトコルを構築するために、リモートログインセッションや他のネットワークサービスにセキュリティを提供するための現在より信頼性の高いプロトコルです.
sshバージョン:
sshv 1:CRC-32に基づいてMACを行い、安全ではない
sshv 2:暗号化メカニズムとMACメカニズムは双方が協議して選択する.
DHに基づいて鍵交換を実現し、RSAまたはDSAに基づいてアイデンティティ認証を実現する.
クライアントは、サーバ側のホスト鍵をチェックすることによって、通信を継続できるか否かを判断する.
三、openssh
Opensshはsshのオープンソース実装であり、リモートコンピュータに安全にアクセスするための接続ツールのセットである.rlogin、rsh rcp、telnetの直接代替品として使用できます.さらに、他の任意のTCP/IP接続は、SSHを介して安全にトンネル/転送することができる.OpenSSHはすべての伝送を暗号化し、盗聴、接続ハイジャック、その他のネットワークレベルの攻撃を効果的に阻止した.OpenSSHはOpenBSDプロジェクトによって維持される.
ログインプロセスはrloginまたはtelnetを使用して確立されたセッションと非常に似ています.接続時、SSHは鍵指紋システムを利用してサーバの真実性を検証します.最初の接続時にのみ、yesの入力を求めるメッセージが表示されます.その後の接続では、予め保存されている鍵の指紋が検証されます.保存した指紋がログイン時に受信したものと一致しない場合は、警告が表示されます.指紋は~/.ssh/known_hostsでは、SSH v 2の指紋については~/.ssh/known_hosts2.
デフォルトでは、より新しいバージョンのOpenSSHはSSH v 2接続のみを受け入れます.バージョン2が使用可能な場合、クライアント・プログラムは自動的に使用されます.そうしないと、バージョン1を使用するモードに戻ります.また、バージョン1または2は、コマンドラインパラメータ-1または-2によって強制的に使用することもできる.クライアントのバージョン1機能を維持するのは、以前のバージョンの互換性を考慮するためです.
[root@node1 ~]# rm -f .ssh/*
[root@node1 ~]# ssh 192.168.30.20   #            ssh        
The authenticity of host '192.168.30.20 (192.168.30.20)' can't be established.
RSA key fingerprint is a3:d3:a0:9d:f0:3b:3e:53:4e:ee:61:87:b9:3a:1c:8c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.30.20' (RSA) to the list of known hosts.
[email protected]'s password: 
Last login: Tue Nov 24 17:33:25 2015 from node1
[root@node2 ~]# logout
Connection to 192.168.30.20 closed.
[root@node1 ~]# cat .ssh/known_hosts 
192.168.30.20 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAzanDCNAhPaTOyvmOF3zWM0LaxPTTZnYqNeRAdtiEj5F4SS3f0JRbCt9vDNELLOtOMpPwehqmvxDtfjQ4l/3nQkMlt7FXJuLCuLSjORTEK3T5GDLXh7S8ZoiNy8TQqg+XqfI+7GTkMpgsQ+ITbvSVXlhyOXKKCgrVQmPnIkzRSuutfJH/PdoCz/cK3txgk8uWUdE+OahoFcxpjZH7qk/ly98QfgEZz36U1adH1upvd6NQzLJtFNAJapBgUmnCWriOytj2Nyu8QAHFvef9ZATUxI6vup99wfXKHBzeszWNeC9ttvKmn/qlDf2M37H3YcKJ1FJ6YM+t77lIIh41zMdagw==
[root@node1 ~]# ssh -2 192.168.30.20

1、opensshはC/Sアーキテクチャを採用する:
      server:openssh-server,sshd,22/tcp
Client:openssh-clients(パッケージ)、ssh
Windowsでよく使われるsshクライアントツール:xshell,putty,securecrt,sshshellclient
2、opensshクライアント:
プロファイル:/etc/ssh/ssh_config
sshコマンドの使用:
ssh[-p PORT][username@]host[COMMAND]またはssh[-p PORT]-l username host[COMMAND]
後にCOMMANDを付けると、一時的にリモートホストにログインして指定命令を実行するだけで、結果を取り戻したらすぐに切断し、ローカルに戻る
[root@node2 ~]# ssh [email protected] hostname
[email protected]'s password: 
node1
[root@node2 ~]#

3、sshプロトコルに基づくscpとsftp
■scp:sshプロトコルを利用してホスト間でファイルの安全な転送を実現するツール
使用法:scp[option]SRC 1...DEST
2つの状況に分けられます.
①ソースファイルは本機にあり、目的はリモートである
       # scp/path/to/somewhere... USERNAME@HOST:/path/to/somewhere
②ソースファイルはリモート、ローカルをターゲット
       # scp USERNAME@HOST:/path/to/somewhere/path/to/somewhere   
一般的なオプション:
-r:ディレクトリのコピー
-p:modeとtimestampを含むソースファイルのメタデータ情報を保持
-q:サイレントモード
-PORT:リモートホストポート番号を指定する.デフォルトの22番ポートでない場合は、このオプションを使用して明示的に指定する必要があります.
[root@node2 ~]# scp anaconda-ks.cfg 192.168.30.10:/tmp
[email protected]'s password: 
anaconda-ks.cfg                                                                                                                          100% 1282     1.3KB/s   00:00    
[root@node2 ~]# scp -r 192.168.30.10:/root/test /tmp/
[email protected]'s password: 
c.txt                                                                                                                                    100%    0     0.0KB/s   00:00    
b.txt                                                                                                                                    100%    0     0.0KB/s   00:00    
[root@node2 ~]# ls /tmp/test
b.txt  c.txt

■sftp:sshベースのftpサービスで、安全性はftpよりずっとよく、opensshサービス側はこの機能を内蔵し、デフォルトで有効にします.
使用法:sftp[-oPORT=#]USERNAME@HOST[:/path/to/somewhere]
Opensshサービス側がデフォルトの22番ポートでない場合は、オプション-oPORTで指定します.
cd:リモートディレクトリの切り替え
lcd:ローカルディレクトリの切り替え
[root@node1 ~]# sftp -oPORT=7796 [email protected]
Connecting to 192.168.30.20...
sftp> help
Available commands:
bye                                Quit sftp
cd path                            Change remote directory to 'path'
chgrp grp path                     Change group of file 'path' to 'grp'
chmod mode path                    Change permissions of file 'path' to 'mode'
chown own path                     Change owner of file 'path' to 'own'
df [-hi] [path]                    Display statistics for current directory or
                                   filesystem containing 'path'
exit                               Quit sftp
get [-P] remote-path [local-path]  Download file
help                               Display this help text
lcd path                           Change local directory to 'path'
lls [ls-options [path]]            Display local directory listing
lmkdir path                        Create local directory
ln oldpath newpath                 Symlink remote file
lpwd                               Print local working directory
ls [-1aflnrSt] [path]              Display remote directory listing
lumask umask                       Set local umask to 'umask'
mkdir path                         Create remote directory
progress                           Toggle display of progress meter
put [-P] local-path [remote-path]  Upload file
pwd                                Display remote working directory
quit                               Quit sftp
rename oldpath newpath             Rename remote file
rm path                            Delete remote file
rmdir path                         Remove remote directory
symlink oldpath newpath            Symlink remote file
version                            Show SFTP version
!command                           Execute 'command' in local shell
!                                  Escape to local shell
?                                  Synonym for help
sftp> ls
tesla.txt  
sftp> get tesla.txt /tmp/test
Fetching /home/tesla/tesla.txt to /tmp/test/tesla.txt
sftp> quit
[root@node1 ~]# ls /tmp/test
tesla.txt

4、opensshのサーバー側:
サービススクリプト:/etc/rc.d/init.d/sshd
スクリプトプロファイル:/etc/sysconfig/sshd
プロファイル:/etc/ssh/sshd_config
構成パラメータ:(mansshd_config)
Port:デフォルトの傍受ポートの変更
          ListenAddress
★安全のため、ネット上でsshサービスを提供するホストは、周知の22番ポートをできるだけ使用しないようにし、暴力的に攻撃されやすい.Lastbコマンドを使用して、最近のログインシステムの失敗の情報を表示します(このコマンドはブログを参照).http://9124573.blog.51cto.com/9114573/1700512また、/var/log/secure(管理者のみがアクセスできる)を表示して詳細を取得することもできます.
[root@node2 ~]# vim /etc/ssh/sshd_config 
...
#Port 22    #    22   
port 7796    #       
#AddressFamily any    #       (ipv4  ipv6)
#ListenAddress 0.0.0.0    #           (ipv4) 
#ListenAddress ::    #           (ipv6) 

# Disable legacy (protocol version 1) support in the server for new
# installations. In future the default will change to require explicit
# activation of protocol 1
Protocol 2    #    ssh v2

# HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key    #ssh v1       
# HostKeys for protocol version 2
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key

# Lifetime and size of ephemeral version 1 server key
#KeyRegenerationInterval 1h   #            
#ServerKeyBits 1024

# Logging
# obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
SyslogFacility AUTHPRIV
#LogLevel INFO

# Authentication:

#LoginGraceTime 2m    #              
#PermitRootLogin yes   #              ;    no,         su    
#StrictModes yes
#MaxAuthTries 6   #      ,      
#MaxSessions 10   #  ssh   

#RSAAuthentication yes
#PubkeyAuthentication yes    #        
#AuthorizedKeysFile     .ssh/authorized_keys   #          
#AuthorizedKeysCommand none
#AuthorizedKeysCommandRunAs nobody

...
#ClientAliveInterval 0   #       ,       
#ClientAliveCountMax 3   #          
#ShowPatchLevel no
#UseDNS yes
#PidFile /var/run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none

# no default banner path
#Banner none

# override default of no subsystems
Subsystem       sftp    /usr/libexec/openssh/sftp-server    #    sftp  

# Example of overriding settings on a per-user basis
#Match User anoncvs
#       X11Forwarding no
#       AllowTcpForwarding no
#       ForceCommand cvs server
[root@node2 ~]# service sshd restart
#                  ,         reload  
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]
[root@node2 ~]# netstat -tnl   #    7796      
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State      
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      
tcp        0      0 0.0.0.0:7796                0.0.0.0:*                   LISTEN      
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      
tcp        0      0 127.0.0.1:6010              0.0.0.0:*                   LISTEN      
tcp        0      0 0.0.0.0:49951               0.0.0.0:*                   LISTEN      
tcp        0      0 :::111                      :::*                        LISTEN      
tcp        0      0 :::49553                    :::*                        LISTEN      
tcp        0      0 :::7796                     :::*                        LISTEN      
tcp        0      0 ::1:631                     :::*                        LISTEN      
tcp        0      0 ::1:6010                    :::*                        LISTEN
[root@node2 ~]# iptables -R INPUT 4 -p tcp --dport 7796 -j ACCEPT   #       ,         
[root@node2 ~]# logout
...
[c:\~]$ ssh 192.168.30.20 7796   #          


Connecting to 192.168.30.20:7796...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

Last login: Tue Nov 24 19:46:16 2015 from 192.168.30.1
[root@node2 ~]#

5、sshd認証クライアントの方式:
(1)パスワードベースの認証
(2)鍵による認証
①クライアント生成鍵ペア
          # ssh-keygen -t rsa
一般的なオプション:
-f/path/to/somefile:鍵ファイル保存場所;デフォルトは現在のユーザーホームディレクトリの下にあります.sshディレクトリ
-P':oldpasswordの指定
生成された鍵のデフォルトはid_です.rsa, id_rsa.pub
②公開鍵情報をリモートホストのあるユーザホームディレクトリの下に導入する.ssh/authorized_keysファイル
方法は2つあります.
クライアント:scp-P 7796.ssh/id_rsa.pubユーザ@192.168.30.20:ユーザーのホームディレクトリ
サーバ側:cat id_rsa.pub >> .ssh/authorized_keys
            ㈡ssh-copy-id -i .ssh/id_rsa.pub USERNAME@HOST
リモートホストがデフォルトの22番ポートをリスニングしていない場合は、ポートを指定します.
             ssh-copy-id -i .ssh/id_rsa.pub '-p PORT USERNAME@HOST'
例:node 2はopensshサービス側、node 1はクライアント
[root@node1 ~]# 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:
ca:8c:ba:06:7a:33:58:73:54:fe:f1:f6:59:89:a7:d0 root@node1
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|      .          |
|     o           |
|    . . .        |
|   .   .So . . . |
|. o .+ .. + E +  |
|.+ o. +  . o =   |
|o =.        +    |
| oo+             |
+-----------------+
[root@node1 ~]# ls .ssh
id_rsa  id_rsa.pub  known_hosts
[root@node1 ~]# ll .ssh
total 12
-rw------- 1 root root 1675 Nov 24 21:23 id_rsa
-rw-r--r-- 1 root root  392 Nov 24 21:23 id_rsa.pub
-rw-r--r-- 1 root root  395 Nov 24 09:51 known_hosts
[root@node1 ~]# scp -P 7796 .ssh/id_rsa.pub 192.168.30.20:/root   #     ,               
[email protected]'s password: 
id_rsa.pub                                                                                                                               100%  392     0.4KB/s   00:00    
[root@node1 ~]# ssh-copy-id -i .ssh/id_rsa.pub '-p 7796 [email protected]'
#     ,                  .ssh/authorized_keys   
[email protected]'s password: 
Now try logging into the machine, with "ssh '-p 7796 [email protected]'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

[root@node1 ~]# ssh -p 7796 [email protected]   #       
Last login: Fri Nov 27 03:30:38 2015 from 192.168.30.1
[tesla@node2 ~]$ logout
Connection to 192.168.30.20 closed.
[root@node2 ~]# ls
anaconda-ks.cfg  boot.iso  digest     Downloads  httpd.crt  id_rsa.pub   install.log.syslog  key2      messages.cipher  Pictures  Templates  test.sh  vmware-tools-distrib
awk.txt          Desktop   Documents  fstab      httpd.csr  install.log  key1                messages  Music            Public    test       Videos
[root@node2 ~]# cat id_rsa.pub >> .ssh/authorized_keys   #              .ssh/authorized_keys 
[root@node2 ~]# cat .ssh/authorized_keys 
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAzMvlCKm+I3UgisZAak3Os6MTcNaC2mtP8H31L+mf0m+hsrq1fXk+QTMPsel1NHkPF5k3p3aMzbar+xpw57Tv97/amnhFATDA+rFCwT6bHyoxV2z+UhlhAFPGzin9bbBsBAqnxtNxuCDdQPUpXgbmz7zF3Impy/386Xt03fO3nnbcVnF5n6kMQ1tMD7x0ldPaR6N5kc92FtFMPrEKBiponsck8duW+73zHk9alcK0Q8e7Y+KFcMJtJogQsWjzjBbcunDLpzmHN3qAFna9sHQ93Xxy2WRuqfcJT/kYBWTHWHm7i+xW+fKhbvvuKRARXH8nVCdumELE44xACoPbCKIThQ== root@node1
[root@node2 ~]# ll .ssh
total 8
-rw-r--r-- 1 root root 392 Nov 27 22:59 authorized_keys
-rw-r--r-- 1 root root 395 Nov 27 19:02 known_hosts
[root@node2 ~]# chmod 600 .ssh/authorized_keys   #     .ssh/authorized_keys     
[root@node1 ~]# ssh -p 7796 [email protected]   #         
Last login: Sat Nov 28 00:06:48 2015 from 192.168.30.1
[root@node2 ~]#

           
7、ssh実践提案:
①デフォルトの22番ポートは使用しない
②protocol 1は使用しない
③ログイン可能なユーザーの制限
sshdプロファイルでは、次の手順に従います.
ホワイトリスト:
           AllowUsers user1 user2 ...
           AllowGroups grp1 grp2...
ブラックリスト:
           DenyUsers 
           DenyGroups
④空きセッションのタイムアウト時間を設定する
       ClientAliveInterval 300 
       ClientAliveCountMax 0
⑤ファイアウォールを利用してsshアクセスポリシーを設定する.
⑥本機のすべてのIPアドレスではなく、特定のIPアドレスのみを傍受する.
⑦強力なパスワードポリシーの使用
       # tr -dc A-Za-z0-9_ ⑧鍵に基づく認証を使用する.
⑨空のパスワードの使用を禁止する.
⑩rootユーザーの直接登録を禁止する;
⒒sshのアクセス頻度を制限する
ㄇログを作成し、よく分析する.