9.4 SSH和SSHD

sshd 服务

https://www.jianshu.com/p/85a956108421

配置文件 /etc/ssh/sshd_config

系统的密钥对位置

/etc/ssh/

登录的基本操作

以密码认证方式登录到远程服务器(ssh 服务端)

场景1:
ssh 客户端使用 root 用户连接到 ssh 服务端,假设服务端 ip 为 10.0.122.133

先决条件:

  • 服务端有 root 用户
  • 服务端开启了 sshd 服务,默认监听端口 22
  • 客户端有个 ssh 客户端工具
  1. 首先在 客户端为当前的用户创建密钥对
ssh-keygen [-t dsa | ecdsa | ed25519 | rsa | rsa1]  

默认就是 rsa

ssh-keygen

此时,当前用户的家目录的 .ssh 目录下就会有密钥对

id_rsa            私钥
id_rsa.pub     公钥

公钥用于非密码认证方式时,传送给对方,作为信任的凭证。
私钥会报存到本地

  1. 以 服务端的用户 root 连接到 服务端
ssh   root@服务端ip
或者
ssh   root@服务端主机名

这里服务端的主机名必须可以被客户端主机正确解析

假如第一次连接会得到一个提示。
大致的意思是,要不要信任 ssh 服务端的公钥。信任输入 yes
此时,客户端会把 服务端的 公钥存放在当前用户家目录下的 .ssh/known_hosts
文件中,一行一个主机。

  1. 输入密码即可

22 端口登录

服务端设置 /etc/sshd_config

Port 2222

重启服务

systemctl restart sshd

检查监听端口

[root@shark ~]# ss -natl |grep 2222
LISTEN     0      128          *:2222                     *:*
LISTEN     0      128         :::2222                    :::*

客户端连接

ssh  -p   2222   [email protected]

-p 为小写的字母 p

以公钥的方式认证方式登录到远程服务器(ssh 服务端)

  1. 延续上面的实验继续。

客户端需要发送自己的公钥给服务端,服务端接收后会保存在用户家目录中的 .ssh/authorized_keys 文件中

ssh-copy-id   [email protected]

ssh-copy-id    服务端用户@服务端ip

  1. 登录验证
ssh  [email protected]

scp 传输文件

scp 是基于 ssh 协议的,可以实现客户端和服务端的文件传输

拷贝客户端到服务端

下面是把客户端的当前目录下的文件 local_file.txt 传输到服务端的 /tmp/ 目录下,文件名不变。

scp   local_file.txt    [email protected]:/tmp/

假如指定端口

scp  -P 2222   local_file.txt    [email protected]:/tmp/

拷贝服务端文件到客户端

下面的命令是把服务端的文件 /tmp/local_file.txt 传输到客户端的当前操作命令的目录下

scp  [email protected]:/tmp/local_file.txt   .

注意最后的点 .

假如指定端口

scp   -P  2222  [email protected]:/tmp/local_file.txt   .

常用配置参数

加速 SSH 的连接
GSSAPIAuthentication no

1\.  SSH Server 的设置,包含使用的 port 啦,以及使用的密碼演算方式
Port 22
# SSH 默认监听 22 這個port,也可以使用多個port,即重複使用 port 這個設定項目!
# 例如想要開放 sshd 在 22 與 443 ,則多加一行內容為:『 Port 443 』
# 然後重新啟動 sshd 這樣就好了!不過,不建議修改 port number 啦!

Protocol 2
# 選擇的 SSH 協定版本,可以是 1 也可以是 2 ,CentOS 5.x 預設是僅支援 V2。
# 如果想要支援舊版 V1 ,就得要使用『 Protocol 2,1 』才行。

ListenAddress 0.0.0.0
# 監聽的主機介面卡!舉個例子來說,如果你有兩個 IP,分別是 192.168.1.100 及 192.168.100.254,假設你只想要讓 192.168.1.100 可以監聽 sshd ,那就這樣寫:
# 『 ListenAddress 192.168.1.100 』預設值是監聽所有介面的 SSH 要求

PidFile /var/run/sshd.pid
# 可以放置 SSHD 這個 PID 的檔案!上述為預設值

LoginGraceTime 2m
# 當使用者連上 SSH server 之後,會出現輸入密碼的畫面,在該畫面中,
# 在多久時間內沒有成功連上 SSH server 就強迫斷線!若無單位則預設時間為秒!

Compression delayed
# 指定何時開始使用壓縮資料模式進行傳輸。有 yes, no 與登入後才將資料壓縮 (delayed)

2\. 說明主機的 Private Key 放置的檔案,預設使用下面的檔案即可!
HostKey /etc/ssh/ssh_host_key        # SSH version 1 使用的私鑰
HostKey /etc/ssh/ssh_host_rsa_key    # SSH version 2 使用的 RSA 私鑰
HostKey /etc/ssh/ssh_host_dsa_key    # SSH version 2 使用的 DSA 私鑰
# 還記得我們在主機的 SSH 連線流程裡面談到的,這裡就是 Host Key ~

3\. 關於登錄檔的訊息資料放置與 daemon 的名稱!
SyslogFacility AUTHPRIV
# 當有人使用 SSH 登入系統的時候,SSH 會記錄資訊,這個資訊要記錄在什麼 daemon name
# 底下?預設是以 AUTH 來設定的,即是 /var/log/secure 裡面!什麼?忘記了!
# 回到 [Linux 基礎](http://linux.vbird.org/linux_basic/)去翻一下。其他可用的 daemon name 為:
DAEMON,USER,AUTH, LOCAL0,LOCAL1,LOCAL2,LOCAL3,LOCAL4,LOCAL5,

LogLevel INFO
# 登錄記錄的等級!嘿嘿!任何訊息!同樣的,忘記了就回去參考!

4\. 安全設定項目!極重要!
4.1 登入設定部分
PermitRootLogin yes
# 是否允許 root 登入!預設是允許的,但是建議設定成 no!

StrictModes yes
# 是否讓 sshd 去檢查使用者家目錄或相關檔案的權限資料,
# 這是為了擔心使用者將某些重要檔案的權限設錯,可能會導致一些問題所致。
# 例如使用者的 ~.ssh/ 權限設錯時,某些特殊情況下會不許用戶登入

PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys
# 是否允許用戶自行使用成對的金鑰系統進行登入行為,僅針對 version 2。
# 至於自製的公鑰資料就放置於使用者家目錄下的 .ssh/authorized_keys 內

PasswordAuthentication yes
# 密碼驗證當然是需要的!所以這裡寫 yes 囉!

PermitEmptyPasswords no
# 若上面那一項如果設定為 yes 的話,這一項就最好設定為 no ,
# 這個項目在是否允許以空的密碼登入!當然不許!

4.2 認證部分
RhostsAuthentication no
# 本機系統不使用 .rhosts,因為僅使用 .rhosts太不安全了,所以這裡一定要設定為 no

IgnoreRhosts yes
# 是否取消使用 ~/.ssh/.rhosts 來做為認證!當然是!

RhostsRSAAuthentication no #
# 這個選項是專門給 version 1 用的,使用 rhosts 檔案在 /etc/hosts.equiv
# 配合 RSA 演算方式來進行認證!不要使用啊!

HostbasedAuthentication no
# 這個項目與上面的項目類似,不過是給 version 2 使用的!

IgnoreUserKnownHosts no
# 是否忽略家目錄內的 ~/.ssh/known_hosts 這個檔案所記錄的主機內容?
# 當然不要忽略,所以這裡就是 no 啦!

ChallengeResponseAuthentication no
# 允許任何的密碼認證!所以,任何 login.conf 規定的認證方式,均可適用!
# 但目前我們比較喜歡使用 PAM 模組幫忙管理認證,因此這個選項可以設定為 no 喔!

UsePAM yes
# 利用 PAM 管理使用者認證有很多好處,可以記錄與管理。
# 所以這裡我們建議你使用 UsePAM 且 ChallengeResponseAuthentication 設定為 no 

4.3 與 Kerberos 有關的參數設定!因為我們沒有 Kerberos 主機,所以底下不用設定!
KerberosAuthentication no
KerberosOrLocalPasswd yes
KerberosTicketCleanup yes
KerberosTgtPassing no

4.4 底下是有關在 X-Window 底下使用的相關設定!
X11Forwarding yes
#X11DisplayOffset 10
# X11UseLocalhost yes
# 比較重要的是 X11Forwarding 項目,他可以讓視窗的資料透過 ssh 通道來傳送喔!

4.5 登入後的項目:
PrintMotd yes
# 登入後是否顯示出一些資訊呢?例如上次登入的時間、地點等等,預設是 yes
# 亦即是列印出 /etc/motd 這個檔案的內容。但是,如果為了安全,可以考慮改為 no !

PrintLastLog yes
# 顯示上次登入的資訊!可以啊!預設也是 yes !

TCPKeepAlive yes
# 當達成連線後,伺服器會一直傳送 TCP 封包給用戶端藉以判斷對方式否一直存在連線。
# 不過,如果連線時中間的路由器暫時停止服務幾秒鐘,也會讓連線中斷喔!
# 在這個情況下,任何一端死掉後,SSH可以立刻知道!而不會有僵屍程序的發生!
# 但如果你的網路或路由器常常不穩定,那麼可以設定為 no 的啦!

UsePrivilegeSeparation yes
# 是否使用權限較低的程序來提供使用者操作。我們知道 sshd 啟動在 port 22 ,
# 因此啟動的程序是屬於 root 的身份。那麼當 student 登入後,這個設定值
# 會讓 sshd 產生一個屬於 sutdent 的 sshd 程序來使用,對系統較安全

MaxStartups 10
# 同時允許幾個尚未登入的連線畫面?當我們連上 SSH ,但是尚未輸入密碼時,
# 這個時候就是我們所謂的連線畫面啦!在這個連線畫面中,為了保護主機,
# 所以需要設定最大值,預設最多十個連線畫面,而已經建立連線的不計算在這十個當中

4.6 關於使用者抵擋的設定項目:
DenyUsers *
# 設定受抵擋的使用者名稱,如果是全部的使用者,那就是全部擋吧!
# 若是部分使用者,可以將該帳號填入!例如下列!
DenyUsers test

DenyGroups test
# 與 DenyUsers 相同!僅抵擋幾個群組而已!

5\. 關於 SFTP 服務與其他的設定項目!
Subsystem       sftp    /usr/lib/ssh/sftp-server
UseDNS yes
# 一般來說,為了要判斷用戶端來源是正常合法的,因此會使用 DNS 去反查用戶端的主機名
# 不過如果是在內網互連,這項目設定為 no 会连接建立的速度比較快。

参考资料 sshd_conf 中文手册

心得

SSHD服务

配置文件 /etc/ssh/sshd_config
/etc/ssh/存放了系统密钥

SSH登录的基本条件

SSH使用普通用户xiaoli连接服务端10.0.122.226
先决条件:

  • 服务端有xiaoli用户
  • 服务端开启了sshd服务,默认监听端口为22
  • 客户端有ssh客户端工具
  1. 首先在客户端为当前用户创建密钥对
ssh-keygen [-t dsa | ecdsa | ed25519 | rsa | rsa1]  

默认就是rsa算法,加-t就是选择算法

ssh-keygen

此时,当前用户的家目录的.ssh目录下就会有密钥对

id_rsa        私钥
id_rsa.pub        公钥

公钥用于非密码认证方式时,传送给对方,作为信任的凭证。
私钥会保存到本地

  1. 客户端连接到服务端要用服务端的用户xiaoli
ssh xiaoli@服务端ip
或者
ssh xiaoli@服务端主机名
这里服务端的主机名必须可以被客户端主机正确解析

假如第一次连接会得到一个提示。
大致意识是,要不要信任ssh服务端的公钥。信任输入yes
此时,客户端会把服务端的公钥存放到当前用户的家目录下的.ssh//known_hosts文件中,一行一个主机。

  1. 输入密码即可

非22端口登录

服务端的设置在/etc/ssh/sshd_config文件中

Port 2222     端口在此修改

重启服务

systemctl restart sshd

检测监听端口

[xiaoli@centos ssh]$ ss -natl |grep 2222
LISTEN     0      128          *:2222                     *:*                  
LISTEN     0      128         :::2222                    :::*

客户端连接

ssh -p 2222 [email protected]

-p为小写的字母-p

以公钥的方式认证登录远程服务器(免密登录)

  1. 延续上面的实验
    客户端需要发送自己的公钥给服务端,服务端收到后存放到自己的家目录下的.ssh/authorized_keys文件中
ssh-copy-id [email protected]
ssh-copy-id 客户端用户@服务端ip
  1. 登陆免验证
ssh -p 2222 [email protected]

SCP传输文件

scp是基于ssh协议的,可以实现客户端和服务端的文件传输

拷贝文件

分为两种拷贝方式

  • 从客户端拷贝到服务端
  • 从服务端拷贝到客户端(本地)
    特征:scp -P 22 源文件路径 目的路径文件
    注意:端口号是 P

从客户端拷贝到服务端

[root@mini ~]# scp -P 2222 a.txt [email protected]:~/

从服务端拷贝到客户端

[root@mini ~]# scp  -P 2222 [email protected]:~/mysql* .

常用配置参数/etc/ssh/sshd_config文件

1\.  SSH Server 的设置,包含使用的 port 啦,以及使用的密碼演算方式
Port 22
# SSH 默认监听 22 這個port,也可以使用多個port,即重複使用 port 這個設定項目!
# 例如想要開放 sshd 在 22 與 443 ,則多加一行內容為:『 Port 443 』
# 然後重新啟動 sshd 這樣就好了!不過,不建議修改 port number 啦!

Protocol 2
# 選擇的 SSH 協定版本,可以是 1 也可以是 2 ,CentOS 5.x 預設是僅支援 V2。
# 如果想要支援舊版 V1 ,就得要使用『 Protocol 2,1 』才行。

ListenAddress 0.0.0.0
# 監聽的主機介面卡!舉個例子來說,如果你有兩個 IP,分別是 192.168.1.100 及 192.168.100.254,假設你只想要讓 192.168.1.100 可以監聽 sshd ,那就這樣寫:
# 『 ListenAddress 192.168.1.100 』預設值是監聽所有介面的 SSH 要求

PidFile /var/run/sshd.pid
# 可以放置 SSHD 這個 PID 的檔案!上述為預設值

LoginGraceTime 2m
# 當使用者連上 SSH server 之後,會出現輸入密碼的畫面,在該畫面中,
# 在多久時間內沒有成功連上 SSH server 就強迫斷線!若無單位則預設時間為秒!

Compression delayed
# 指定何時開始使用壓縮資料模式進行傳輸。有 yes, no 與登入後才將資料壓縮 (delayed)

2\. 說明主機的 Private Key 放置的檔案,預設使用下面的檔案即可!
HostKey /etc/ssh/ssh_host_key        # SSH version 1 使用的私鑰
HostKey /etc/ssh/ssh_host_rsa_key    # SSH version 2 使用的 RSA 私鑰
HostKey /etc/ssh/ssh_host_dsa_key    # SSH version 2 使用的 DSA 私鑰
# 還記得我們在主機的 SSH 連線流程裡面談到的,這裡就是 Host Key ~

3\. 關於登錄檔的訊息資料放置與 daemon 的名稱!
SyslogFacility AUTHPRIV
# 當有人使用 SSH 登入系統的時候,SSH 會記錄資訊,這個資訊要記錄在什麼 daemon name
# 底下?預設是以 AUTH 來設定的,即是 /var/log/secure 裡面!什麼?忘記了!
# 回到 [Linux 基礎](http://linux.vbird.org/linux_basic/)去翻一下。其他可用的 daemon name 為:
DAEMON,USER,AUTH, LOCAL0,LOCAL1,LOCAL2,LOCAL3,LOCAL4,LOCAL5,

LogLevel INFO
# 登錄記錄的等級!嘿嘿!任何訊息!同樣的,忘記了就回去參考!

4\. 安全設定項目!極重要!
4.1 登入設定部分
PermitRootLogin yes
# 是否允許 root 登入!預設是允許的,但是建議設定成 no!

StrictModes yes
# 是否讓 sshd 去檢查使用者家目錄或相關檔案的權限資料,
# 這是為了擔心使用者將某些重要檔案的權限設錯,可能會導致一些問題所致。
# 例如使用者的 ~.ssh/ 權限設錯時,某些特殊情況下會不許用戶登入

PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys
# 是否允許用戶自行使用成對的金鑰系統進行登入行為,僅針對 version 2。
# 至於自製的公鑰資料就放置於使用者家目錄下的 .ssh/authorized_keys 內

PasswordAuthentication yes
# 密碼驗證當然是需要的!所以這裡寫 yes 囉!

PermitEmptyPasswords no
# 若上面那一項如果設定為 yes 的話,這一項就最好設定為 no ,
# 這個項目在是否允許以空的密碼登入!當然不許!

4.2 認證部分
RhostsAuthentication no
# 本機系統不使用 .rhosts,因為僅使用 .rhosts太不安全了,所以這裡一定要設定為 no

IgnoreRhosts yes
# 是否取消使用 ~/.ssh/.rhosts 來做為認證!當然是!

RhostsRSAAuthentication no #
# 這個選項是專門給 version 1 用的,使用 rhosts 檔案在 /etc/hosts.equiv
# 配合 RSA 演算方式來進行認證!不要使用啊!

HostbasedAuthentication no
# 這個項目與上面的項目類似,不過是給 version 2 使用的!

IgnoreUserKnownHosts no
# 是否忽略家目錄內的 ~/.ssh/known_hosts 這個檔案所記錄的主機內容?
# 當然不要忽略,所以這裡就是 no 啦!

ChallengeResponseAuthentication no
# 允許任何的密碼認證!所以,任何 login.conf 規定的認證方式,均可適用!
# 但目前我們比較喜歡使用 PAM 模組幫忙管理認證,因此這個選項可以設定為 no 喔!

UsePAM yes
# 利用 PAM 管理使用者認證有很多好處,可以記錄與管理。
# 所以這裡我們建議你使用 UsePAM 且 ChallengeResponseAuthentication 設定為 no 

4.3 與 Kerberos 有關的參數設定!因為我們沒有 Kerberos 主機,所以底下不用設定!
KerberosAuthentication no
KerberosOrLocalPasswd yes
KerberosTicketCleanup yes
KerberosTgtPassing no

4.4 底下是有關在 X-Window 底下使用的相關設定!
X11Forwarding yes
#X11DisplayOffset 10
# X11UseLocalhost yes
# 比較重要的是 X11Forwarding 項目,他可以讓視窗的資料透過 ssh 通道來傳送喔!

4.5 登入後的項目:
PrintMotd yes
# 登入後是否顯示出一些資訊呢?例如上次登入的時間、地點等等,預設是 yes
# 亦即是列印出 /etc/motd 這個檔案的內容。但是,如果為了安全,可以考慮改為 no !

PrintLastLog yes
# 顯示上次登入的資訊!可以啊!預設也是 yes !

TCPKeepAlive yes
# 當達成連線後,伺服器會一直傳送 TCP 封包給用戶端藉以判斷對方式否一直存在連線。
# 不過,如果連線時中間的路由器暫時停止服務幾秒鐘,也會讓連線中斷喔!
# 在這個情況下,任何一端死掉後,SSH可以立刻知道!而不會有僵屍程序的發生!
# 但如果你的網路或路由器常常不穩定,那麼可以設定為 no 的啦!

UsePrivilegeSeparation yes
# 是否使用權限較低的程序來提供使用者操作。我們知道 sshd 啟動在 port 22 ,
# 因此啟動的程序是屬於 root 的身份。那麼當 student 登入後,這個設定值
# 會讓 sshd 產生一個屬於 sutdent 的 sshd 程序來使用,對系統較安全

MaxStartups 10
# 同時允許幾個尚未登入的連線畫面?當我們連上 SSH ,但是尚未輸入密碼時,
# 這個時候就是我們所謂的連線畫面啦!在這個連線畫面中,為了保護主機,
# 所以需要設定最大值,預設最多十個連線畫面,而已經建立連線的不計算在這十個當中

4.6 關於使用者抵擋的設定項目:
DenyUsers *
# 設定受抵擋的使用者名稱,如果是全部的使用者,那就是全部擋吧!
# 若是部分使用者,可以將該帳號填入!例如下列!
DenyUsers test

DenyGroups test
# 與 DenyUsers 相同!僅抵擋幾個群組而已!

5\. 關於 SFTP 服務與其他的設定項目!
Subsystem       sftp    /usr/lib/ssh/sftp-server
UseDNS yes
# 一般來說,為了要判斷用戶端來源是正常合法的,因此會使用 DNS 去反查用戶端的主機名
# 不過如果是在內網互連,這項目設定為 no 会连接建立的速度比較快。

参考资料 sshd_conf 中文手册

你可能感兴趣的:(9.4 SSH和SSHD)