SSHは、セキュアシェルの略でリモートログインプロトコルを提供する安全な方法で、IETF SSHのネットワークグループ(ネットワークワーキンググループ)が開発し、現在、リモートでLinuxシステムを管理するための好ましい方法である、SSHは、アプリケーション層に設立されました。ベースのセキュリティプロトコルは、SSHは、リモートログインセッションのためのセキュリティプロトコル、およびその他のネットワークサービスを提供するために設計された、より信頼性が高くなります。SSHプロトコルが効果的に情報開示の問題の過程でリモート管理の使用を防ぐことができます。
ローカルコンピュータからユーザーは、SSHプロトコルを使用して別のリモートコンピュータにログオンしている場合、SSHは、コンピュータ間で暗号化ログインに使用するネットワーク・プロトコルである、我々は、彼らが傍受されている場合でも、このログインが安全であることを信じることができますパスワードが漏れることはありません。最初の時間を、インターネット通信は、通信は、公開コンテンツに、一度傍受明示である。1995年、フィンランドの研究者タトゥYlonenとは、SSHプロトコル、すべての暗号化のログイン情報を設計し、インターネットセキュリティは、基本的になってきましたソリューションは、急速に世界にプロモーションを獲得し、今のLinuxシステムの標準的な構成となっています。
SSHは、それは公開鍵暗号を使用していることを、セキュリティを確保することができました、次のようにSSHログイン認証プロセスは次のとおりです。
1.リモートホストは、ユーザのログイン要求、およびユーザーへの彼自身の公開鍵を受け取る。
2.公共のユーザーの受け入れと使用を、リモートホストに送信された暗号化されたパスワード、後に。
3.リモートホストを独自のプライベートでキーは、パスワードが正しい場合は、パスワードを解読、ユーザログインに合意しました。
プロセス自体は安全ですが、実装のリスクがある、誰かのインターセプトログイン要求場合は、リモートホストを装って、ユーザーに偽の公開鍵は、その後、ユーザーは真偽を区別することは困難である。そのため、HTTPSプロトコルとは異なり、 SSHプロトコルの公開鍵は、認証局(CA)公証、すべて自分自身を発行しないで、簡単に悪用される可能性が。
SSHリモートログイン
◆◆ログインパスワード
:パスワードを使用してログインし、以下のように、ユーザー名とパスワードを使ってログインし、リモートホストを。
[root@localhost ~]# ssh [email protected] -p 22
The authenticity of host 'host (192.168.1.5)' can't be established.
RSA key fingerprint is 94:ee:d7:e0:de:9f:ac:65:22:c1:22:2d:37:12:38:0d.
Are you sure you want to continue connecting (yes/no)?yes
[email protected]'s password:
これらの言葉の意味、それは公開鍵の指紋だだけで、ホストホストの信憑性を確認することができませんでした、いわゆる「公開鍵の指紋は、」公開鍵(RSAアルゴリズムは、ここでは1024年までを使用)の長さが長いを指し、それはあります比較することは難しいので、そのMD5計算、128ビットの指紋にそれを回します。
パスワードが正しい場合は、パスワードを入力した後、ログインすることができ、およびリモートホストの後に公衆が受け入れられたとき、それはファイルに保存されます$HOME/.ssh/known_hosts
で、その後、次のホストを接続し、システムがその公開鍵を持って認識されますローカルに保存されているため、一部で警告をスキップし、直接パスワードの入力を求め。
各ユーザは通常、そのようなファイルを持っているシステムに加えて、自分自身のSSH known_hostsファイルを持っている/etc/ssh/ssh_known_hosts
ユーザーが信頼されているすべてのリモートホストへの公開鍵の一部に保存します。
◆◆公衆着陸
使用したパスワード、パスワードは非常に面倒、毎回入力する必要があり、かつ優れたSSHはまた、公共のログインを提供して、パスワードの入力ステップを省略することができ、いわゆる「公開鍵ログオン」は、原則として、ユーザーが公開鍵を所有することを、非常に簡単ですリモートホスト。ログイン時に保存され、リモートホストが自分の秘密鍵の暗号化とユーザーの後に、ユーザーにランダムな文字列を送信し、返信され。リモートホスト予め記憶されている復号化するための公開鍵を使用して、成功した場合、証明しますユーザーは、それが直接ログインシェルは、もはやパスワードを要求することができない、本物です。
1.鍵ペアの生成コマンド、システムはします/root/.ssh/id_rsa
二つの文書下記の公開鍵の秘密鍵を生成します。
[root@localhost ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
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.
生成された公開鍵のコマンドが自動的に他のホストにコピー2.システムは、他のid_rsa.pub / rootディレクトリにコピーされ、自動的にauthorized_keysに名付けます。
[root@localhost ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.1.22 (192.168.1.22)' can't be established.
ECDSA key fingerprint is SHA256:2kWFaV72YVvAl2EU2Zop4uAjP3Gy2jW92d0Va/HrSMM.
ECDSA key fingerprint is MD5:fc:6c:91:b0:02:e6:7e:98:52:af:0d:b3:47:d4:69:ef.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
3.次回のsshログインを使用して他のホスト、上のログインにパスワードなしでは、あなたは確かに着陸設定がオンにされていることを確認することができない場合。
[root@localhost ~]# ssh [email protected]
Last login: Mon Nov 5 09:59:45 2018 from 192.168.1.8
[root@localhost ~]# vim /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
他の構成◆◆
サービスsshdの設定ファイルは、デフォルトで保存され/etc/ssh/sshd_config
たファイルは、我々は次のパラメータのsshd_config設定ファイルを紹介します。
port 22 #监听端口
addressFamily any #允许所有人链接
listenAddress 0.0.0.0 #IPV4监听IP 0.0.0.0表示监听所有
listenAddress : : #IPV6监听IP
protocol 2 #使用二代协议
syslogFacility AUTHPRIV #日志认证等级
permitRootLogin yes #是否允许root登陆
passwordAuthentication yes #是否使用密码认证
permitEmptyPasswords no #是否允许空密码
loginGraceTime 2m #2分钟不输入后自动断开连接
printMotd yes #登陆后根据/etc/motd内容打印信息
printLastLog yes #输出最后一次登录信息
useDNS yes #反查主机名,关闭后可提升登陆速度
gSSAPIAuthentication yes #GSS认证,关闭后可提升登陆速度
pidFile /var/run/sshd.pid #存放sshPID的地方
usePrivilegeSeparation sandbox/yes/no #是否允许以较低权限运行
pubkeyAuthentication yes #使用公钥认证机制
authorizedKeysFile .ssh/auth #公钥的存放位置
MaxAuthTries 5 #密码最大尝试次数
MaxSessions 10 #最大允许终端数
私たちは共通パラメータのsshコマンドバーを見ていき、その後、上記の構成パラメータを読みます。
[root@localhost ~]# ssh --help
语法格式:[ ssh [选项] [用户名]@[地址] ]
-e #支持反斜线控制的字符转换
-q #静默模式
-i #指定身份文件
-o #指定配置选项
-X #开启X11转发功能
-x #关闭X11转发功能
-y #开启信任X11转发功能
-1 #强制使用ssh协议版本1
-2 #强制使用ssh协议版本2
-4 #强制使用IPv4地址
-6 #强制使用IPv6地址
-C #请求压缩所有数据
-f #后台执行ssh指令
-N #不执行远程指令
-F #指定ssh指令的配置文件
-A #开启认证代理连接转发功能
-a #关闭认证代理连接转发功能
-l #指定连接远程服务器登录用户名
-g #允许远程主机连接主机的转发端口
-p #指定远程服务器上的端口
-b #使用本机指定地址作为对应连接的源ip地址
SCPのデータ転送
それがわずかに影響を与える可能性があり、SCPは、リモートコマンドは、Linuxでファイルをコピーするための速記のセキュアコピーであり、それはそこにcpコマンドに似ていますが、CPは、クロスサーバにすることはできませんマシンにコピーして、SCPの送信は暗号化されていますどのような2つのホスト間でファイルをコピーするのに必要な速度は、2つのホスト、で最初に私たちを見て、共通パラメータだけでなく、いくつかの小さな例のscpコマンドのアカウントと操作権をコピーしている間に実行する必要があります。
[root@localhost ~]# scp --help
语法格式:[ scp [选项] [用户名]@[地址] ]
-1 #强制scp命令使用协议ssh1
-2 #强制scp命令使用协议ssh2
-4 #强制scp命令只使用IPv4寻址
-6 #强制scp命令只使用IPv6寻址
-B #使用批处理模式,过程中不询问
-C #允许压缩
-p #留原文件的修改时间,访问时间和访问权限
-q #不显示传输进度条
-r #传送文件夹
-v #详细方式显示输出
-c #以cipher加密传输
-F #指定一个替代的ssh配置文件
-i #传输时指定密钥文件
-l #限制传输带宽,以Kbit/s为单位
-P #指定传输端口
-S #指定加密传输时所使用的程序
リモートへのローカル:ローカル/etc/passwd
、リモートにコピー/tmp
ディレクトリ。
[root@localhost ~]# scp /etc/passwd [email protected]:/tmp/
[email protected]'s password:
passwd 100% 898 876.6KB/s 00:00
地元へのリモート:リモート/etc/shadow
ローカルにコピー/tmp
ディレクトリ。
[root@localhost ~]# scp [email protected]:/etc/shadow /tmp/
[email protected]'s password:
shadow 100% 714 741.2KB/s 00:00
ディレクトリのコピー:リモート/etc
ディレクトリ全体を単位にコピーされ/tmp
たディレクトリ。
[root@localhost ~]# scp -r [email protected]:/etc/ /tmp/
[email protected]'s password:
fstab 100% 465 188.1KB/s 00:00
crypttab 100% 0 0.0KB/s 00:00
mtab 100% 0 0.0KB/s 00:00
...省略...
SSHポート操作
◆◆バインドローカルポート
SSHは、データを送信することができ、我々はこれらの暗号化されたネットワーク接続を任せることはできないので、すべての変更は、このように安全性を向上させること、SSH接続を行くために、私たちはデータポート8080を必要とし、SSH、コマンド書き込みを経由してリモートホストに送信されます。
[root@localhost ~]# ssh -D 8080 user@host
SSHは、ローカル8080ポートを監視するために、ソケットを作成します。データをポートに送信されると、それは自動的にリモートホストに送信された上記のSSH接続に転送される。想像し、暗号化されていないポートであることを8080ターンアウトならば、今これは、暗号化されたポートになります。
◆◆ローカルポートフォワーディング
時には、結合ローカルポートはあなたにもポイントに「ポートフォワーディング」ポイントを形成するように、ターゲットホストのデータ転送を指定する必要があり、十分ではありません。後にテキストを区別するために「リモートポートフォワーディング、」私たちはそれを入れて、「ローカルポートフォワーディング」 (ローカルフォワーディング)。
HOST2は、リモートホストである。様々な理由のために、2つのホスト間で通信することはできないが、HOST3に加えて、二つのホストの前に同時に接続することができ、ローカルホストがHOST1であると仮定しているので、それはHOST3によって、天然の考えであります、HOST1 HOST2を接続します。
私たちはHOST1で次のコマンドを実行します。
[root@localhost ~]# ssh -L 2121:host2:21 host3
彼らはSSHバインドローカルポート2121を指定し、[HOST3を指定することで、このためのコロンで分離されている意味、コマンドパラメータLの3つの値、すなわち、「ポートターゲットホスト:ターゲットホストローカルポート」の合計を受けました。すべてのデータがターゲットホストhost2のポート21に転送されます(FTPを実行しているホスト2を想定し、デフォルトのポートは21です)。
結果として、限り、我々は、ホスト2のポートに接続された21に相当する2121のHOST1ポートを、接続しました。
[root@localhost ~]# ftp localhost:2121
「ローカルポートフォワーディング」は、そうトンネルがHOST1とHOST3の間で秘密のデータ伝送を形成した場合、それはまた、「SSHトンネル」と呼ばれることが、以下がより興味深い例です。
[root@localhost ~]# ssh -L 5900:localhost:5900 host3
これは、(ターゲットホストがHOST3相対的な用語であるため、本明細書にローカルホスト、HOST3を指す)HOST3に従って5900、ポート5900、ポートバインディングマシンを示しています。
別の例は、ポートフォワーディング、SSHログインHOST2てHOST3です。
[root@localhost ~]# ssh -L 9001:host2:22 host3
このとき、長いログインhost2のと同等の9001をログに記録するマシンのsshのポート、などなど。
[root@localhost ~]# ssh -p 9001 localhost
上記は、ログインポートを指定するには、-pパラメータを表しています。
◆◆リモートポートフォワーディング
「ローカルポートフォワーディング」はもちろん、ローカルポート結合は、「リモート・ポートフォワーディング」(リモート転送)を転送するために参照し、リモートポートフォワーディングを結合することであるので、その後、上記の例で、以下に見て、HOST1とHOST2の間で通信することはできません、前方HOST3使用する必要があります。HOST3は、ネットワーク内のマシンですが、特殊なケースがあった、ネットワーク外のネットワーク内で、それがネットワークの外部ホスト1を接続することができますが、その逆はないが、HOST3 host1のロム。このとき、 「ローカルポートフォワーディング」を使用することはできません。
HOST3もHOST1、その後、SSHのホスト1との接続を確立して、HOST3からその上にhost1のこの接続を使用することができますので、解決策は、あります。
私たちは、HOST3で次のコマンドを実行します。
[root@localhost ~]# ssh -R 2121:host2:21 host1
、HOST3を経由して、すべてのデータを、手段、このコマンドはホスト1は、独自のポート2121を監視できるようにすることですhost2のに転送されます。Rパラメータも三つの値は、「ターゲット・ホスト・ポート:ターゲットホストのリモートホストポート」であり、受け入れ21ポート。このような状況が結合した後、「リモートポートバインディング」と呼ばれているので、それは、HOST1は、リモートホストであるHOST3のために、我々はHOST2のHOST1に接続することができますので。
[root@localhost ~]# ftp localhost:2121
ここでは、「リモートポートフォワーディング」の前提条件、host1とhost3という2つのホストがSSHDとsshクライアントを持っていることに留意しなければなりません。