ecure Shell (SSH) 是用于客戶端和服務端之間安全連接的網絡協議。服務端和客戶端之間的每次交互均被加密。
本教程講解了如何在 Ubuntu 系統上啟用 SSH。
啟用SSH服務將允許您遠程連接到系統執行并管理任務。您還可以通過scp和sftp命令來傳輸拷貝文件。
默認情況下,當你安裝完Ubuntu系統后,系統是不允許通過SSH進行遠程訪問的,您需要安裝OpenSSH并啟用它。
安裝方法很簡單,你需要以root或者具備sudo權限的帳號按以下步驟安裝并啟用SSH。
至此,你可以通過SSH遠程連接到你的Ubuntu系統了。Linux 和 macOS 系統默認安裝了 SSH 客戶端。 要從Windows計算機連接,請使用SSH客戶端,例如PuTTY。
通過網絡連接到 Ubuntu 計算機,請使用以下格式調用 ssh 命令,然后輸入用戶名和IP地址:
ssh username@ip_address
如果您不知道Ubuntu系統IP地址,則可在系統上使用ip命令獲取IP地址:
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:0b:5c:e1 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.104/24 brd 192.168.1.255 scope global dynamic noprefixroute enp0s3
valid_lft 7119sec preferred_lft 7119sec
inet6 2409:8944:3bf:5b10:4dbf:5b85:11c9:6335/64 scope global temporary dynamic
valid_lft 588222sec preferred_lft 69692sec
inet6 2409:8944:3bf:5b10:a00:27ff:fe0b:5ce1/64 scope global mngtmpaddr noprefixroute
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe0b:5ce1/64 scope link noprefixroute
valid_lft forever preferred_lft forever
輸出內容中你可以看到IP地址是: 192.168.1.104.
Once you’ve found the IP address, log in to remote machine by running the following sshcommand:
根據獲取的IP地址,你可以通過以下命令方式進行遠程ssh登錄:
ssh linux265@192.168.1.104
首次連接時,你會看到類似如下的信息:
The authenticity of host '192.168.1.104 (192.168.1.104)' can't be established.
ECDSA key fingerprint is SHA256:AqAuoVjwoRuoiFCZ6tdDmIZBvixrHZn4ykzHkB+wVb8.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
輸入yes后,系統提示輸入密碼。
Warning: Permanently added '192.168.1.104' (ECDSA) to the list of known hosts.
linux265@192.168.1.104's password:
輸入密碼登錄成功后,你將看到 Ubuntu 默認歡迎信息:
Welcome to Ubuntu 20.04 LTS (GNU/Linux 5.4.0-26-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
...
現在,你已經成功 ssh 登錄到了你的Ubuntu系統上。
要在您的Ubuntu系統上禁用SSH服務器,只需運行以下命令即可停止SSH服務:
sudo systemctl disable --now ssh
稍后,如果要重新啟用它,請輸入:
sudo systemctl enable --now ssh
如何在Ubuntu 20.04上安裝并啟用SSH已經講解完,現在你可以嘗試在你服務器上安裝并啟用SSH了。
如果你的服務器在公網,建議修改默認的SSH端口,可以降低自動攻擊的風險,從而增加系統安全性。
如果要活的更多關于如何配置SSH server的信息,可以查看SSH/OpenSSH/Configuring配置指導和OpenSSH官網手冊。
、什么是Openssh
OpenSSH 是 SSH (Secure SHell) 協議的免費開源實現。SSH協議族可以用來進行遠程控制, 或在計算機之間傳送文件。而實現此功能的傳統方式,如telnet(終端仿真協議)、 rcp ftp、 rlogin、rsh都是極為不安全的,并且會使用明文傳送密碼。OpenSSH提供了服務端后臺程序和客戶端工具,用來加密遠程控件和文件傳輸過程中的數據,并由此來代替原來的類似服務。
知識延伸:
ssh協議有兩個版本:
v1:基于CRC-32 做MAC,不安全; (一般用于實現主機認證)
v2:基于協議協商選擇雙方都支持的最安全的MAC機制
基于DH做密鑰交換,基于RSA或DSA實現身份認證,從而實現無需輸入賬號面膜
客戶端通過檢查服務器端的主機秘鑰來判斷是否能夠繼續通信;
認證方式:
1、基于口令的認證
2、基于密鑰的認證
二、為什么要使用OpenSSH
由于傳統的telnet、rcp ftp等工具是明文傳輸數據的,對數據安全性存在很大的安全隱患,而OpenSSH可以對傳輸的數據進行加密從而大大提高了數據的安全性。
三、OpenSSH程序簡介
1、OpenSSH的分為客戶端和服務端兩部分
Clients端的配置文件:/etc/ssh/ssh_config
Server端的配置文件:/etc/ssh/sshd_config
Server端服務腳本:/etc/rc.d/init.d/sshd
OpenSSH在Linux系統中默認是安裝并啟動的
openssh 主要的關鍵包有四個
openssh.x86_64 5.3p1-104.el6 //服務端和客戶端的公共組件
openssh-askpass.x86_64 5.3p1-104.el6 //
openssh-clients.x86_64 5.3p1-104.el6 //客戶端安裝包
openssh-server.x86_64 5.3p1-104.el6 //服務端安裝包
openssl-clients 幾個常用文件
[root@1inux ssh]# rpm -ql openssh-clients
/etc/ssh/ssh_config //客戶端配置文件
/usr/bin/scp //遠程復制文件
/usr/bin/sftp //遠程文件共享
/usr/bin/slogin
/usr/bin/ssh
/usr/bin/ssh-add
/usr/bin/ssh-agent
/usr/bin/ssh-copy-id
/usr/bin/ssh-keyscan
openssl-server 幾個常用文件
/etc/rc.d/init.d/sshd
/etc/ssh/sshd_config
/etc/sysconfig/sshd
2、服務器端配置文件/etc/ssh/sshd_config 主要參數詳解
服務端配置文件是讓別人登陸時使用的
注:配置文件中使用“#”注釋掉的一般就是使用默認
#Port 22 //默認端口號,為了其安全一般要更改為其他端口
#AddressFamily any //說明要監聽任意地址
#ListenAddress 0.0.0.0 //監聽本機所有IPV4的ip
#ListenAddress :: //監聽本機所有的IPV6的地址
Protocol 2 監聽的協議版本
# HostKey for protocol version 1 //說明key的協議版本
SyslogFacility AUTHPRIV //使用AUTHPRIV 記錄日志
#LogLevel INFO //log日志級別
#Authentication: //認證相關
#LoginGraceTime 2m //登陸寬限時長 默認2分鐘不登錄自動關閉
#PermitRootLogin yes //是否支持管理員直接登陸
#StrictModes yes //是否使用嚴格模式 (嚴格檢查用戶的某些相關信息)
#MaxAuthTries 6 //最大嘗試次數 (6次以后終端斷開)
#MaxSessions 10 //最大并發允許鏈接數 (超過 將拒絕)
#RSAAuthentication yes //是否支持RSA密鑰認證
#PubkeyAuthentication yes //是否支持公鑰認證
#AuthorizedKeysFile .ssh/authorized_keys //默認保存口令的文件
#PermitEmptyPasswords no //是否支持空密碼登陸
PasswordAuthentication yes
UsePAM yes //是否使用PAM 認證( 是一種統一認證框架)
X11Forwarding yes //是否轉發圖形界面請求 (可以打開遠程服務器圖形界面)
Subsystem sftp /usr/libexec/openssh/sftp-server
#UseDNS yes //是否允許DNS反解 比較浪費時間一般更改為no
/etc/ssh/ssh_known_hosts //保存已經認可主機的文件
3、客戶端配置文件/etc/ssh/ssh_config 主要參數詳解
客戶端配置文件時登陸別人的ssh使用的
#Host * //表示連接所有主機
#Port 22 //默認連接端口
#Cipher 3des //加密時使用的加密機制
#StrictHostKeyChecking ask //嚴格的主機秘鑰檢查 即第一次連接時是否詢問
四、客戶端ssh的使用
1、ssh的基本語法
ssh [OPTIONS] [user]@server [COMMAND]
-l user: 以指定用戶身份連接至服務器;默認使用本地用戶為遠程登錄時的用戶;
ssh user@server
ssh -l user server
[root@1inux ~]# ssh centos@172.16.66.81
The authenticity of host '172.16.66.81 (172.16.66.81)' can't be established.
RSA key fingerprint is d6:3b:33:71:32:69:7a:dd:47:c2:49:03:ec:03:a1:5e.
Are you sure you want to continue connecting (yes/no)?
[root@1inux ~]# ssh -l centos 172.16.66.81
The authenticity of host '172.16.66.81 (172.16.66.81)' can't be established.
RSA key fingerprint is d6:3b:33:71:32:69:7a:dd:47:c2:49:03:ec:03:a1:5e.
Are you sure you want to continue connecting (yes/no)?
-p PORT:指明要連接的端口:
[root@1inux ~]# ssh -p 22 -l centos 172.16.66.81
The authenticity of host '172.16.66.81 (172.16.66.81)' can't be established.
RSA key fingerprint is d6:3b:33:71:32:69:7a:dd:47:c2:49:03:ec:03:a1:5e.
Are you sure you want to continue connecting (yes/no)?
-X :啟用X11Forwarding,即轉發X界面的請求;
-x: 禁用;
-Y: 啟用信任的X11Forwarding
2、ssh 基于秘鑰的認證
2.1、ssh-keygen語法:
ssh-keygen [OPTIONS]
-t {rsa|dsa} 密鑰類型 一般使用rsa
-b # 指明密鑰長度
-f /PATH/TO/OUTPUT_KEYFILE 指明密鑰文件
-P '' :指明加密密鑰的密碼,表示使用空密碼
[root@1inux ~]# ssh-keygen -t rsa //生成密鑰對
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/id_90 //定義保存的密鑰文件名
Enter passphrase (empty for no passphrase): //要求對生成的密鑰對加密,也可以不加密 輸入兩次回車就OK
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_90. //說明已經生成密鑰
Your public key has been saved in /root/.ssh/id_90.pub. //說明已經生成公鑰
The key fingerprint is:
7a:17:b3:e7:6f:54:a1:30:23:62:7c:04:37:10:52:08 root@1inux
The key's randomart image is:
+--[ RSA 2048]----+
| E..+==+ |
| ..+.o.+ . |
| . o . + . .|
| . .|
| S o . |
| . + . |
| . . o .. |
| . . o . |
| .o. |
+-----------------+
[root@1inux ~]#
[root@1inux ~]# ls .ssh/
id_90 id_90.pub known_hosts
[root@1inux ~]#
-------------------------
也可以指明秘鑰路徑 及密碼
[root@1inux .ssh]# ssh-keygen -t rsa -f /root/.ssh/id_rsa -P '' //經測試 名字必須為id_rsa
Generating public/private rsa key pair.
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:
33:c3:f8:f3:2c:ed:88:cc:db:7a:97:5f:d0:de:ce:d9 root@1inux
The key's randomart image is:
+--[ RSA 2048]----+
| |
| |
| |
| o . |
| . S . . |
| . + o . |
| o. . o .|
| o oo=+ . oo|
| *+o++.. .E|
+-----------------+
[root@1inux ~]# ls .ssh/
id_rsa id_rsa.pub id_www id_www.pub known_hosts
2.2、把公鑰部分復制到要登陸遠程主機的特定用戶(可不同于本地用戶)的家目錄下,追加保存至.ssh 目錄中的authorized_keys文件中;
ssh-copy-id -i /PATH/TO/PUBKEY_FILE [user]@server
//使用此命令會自動將公鑰復制到目標主機指定用戶的家目錄下的.ssh/authorized_keys文件中
[root@1inux ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub henan@172.16.66.81
henan@172.16.66.81's password:
Now try logging into the machine, with "ssh 'henan@172.16.66.81'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
2.3、驗證:
[root@1inux .ssh]# ssh lfs@172.16.66.81
Last login: Wed Apr 8 14:31:52 2015 from 172.16.66.90
[lfs@1inux ~]$ //可以看到已經登錄成功
[henan@1inux ~]$ whoami
henan
[henan@1inux ~]$ ifconfig | grep "172.16.66"
inet addr:172.16.66.81 Bcast:172.16.255.255 Mask:255.255.0.0
基于密鑰的命令總結
1、[root@1inux .ssh]# ssh-keygen -t rsa -f /root/.ssh/id_rsa -P ''
2、[root@1inux ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub henan@172.16.66.81
3、ssh lfs@172.16.66.81
2.4、通過ssh直接執行命令
[root@1inux ~]# ssh -l henan 172.16.66.81 date //由于此用于已經基于密鑰認證所以沒有要求輸入密碼
Wed Apr 8 15:01:15 CST 2015
五、scp遠程復制工具的使用簡介
語法:
scp [OPTIONS] SRC...DEST
常用選項:
-r: 遞歸復制,復制目錄及內部文件時使用;
-p: 保存源文件元數據信息中的屬主、屬組及權限;
-q: 靜默模式
-P PORT: 指明遠程服務器使用的端口;
兩種模式:
PUSH: scp [OPTIONS] /PATH/FROM/SOMEFILE ... user@server:/PATH/TO/DEST
//復制本地文件至遠程主機 (但遠程目錄一定要有寫權限)
PULL: SCP [OPTIONS] user@server:/PATH/FROM/SOMEFILE /PATH/TO/DEST
//遠程目標主機文件至本地
eg1:復制當前主機上的/etc/ssh/sshd_config至172.16.66.90主機的/tmp/aa目錄下
[root@1inux ~]# scp -p /etc/ssh/sshd_config henan@172.16.66.90:/root
henan@172.16.66.90's password:
sshd_config 100% 3879 3.8KB/s 00:00
eg2:復制遠程主機/etc/fstab至當前主機當前目錄下
[root@1inux ~]# ls
anaconda-ks.cfg Documents grub.conf install.log Music Public Videos
Desktop Downloads henan@172.16.66.90 install.log.syslog Pictures Templates
[root@1inux ~]# scp root@172.16.66.90:/etc/fstab ./
root@172.16.66.90's password:
fstab 100% 921 0.9KB/s 00:00
[root@1inux ~]# ls
anaconda-ks.cfg Documents fstab henan@172.16.66.90 install.log.syslog Pictures Templates
Desktop Downloads grub.conf install.log Music Public Videos
六、sftp的使用
要使用sftp需要編輯/etc/ssh/sshd_config 開啟Subsystem 即:
Subsystem sftp /usr/libexec/openssh/sftp-server
語法:
sftp [USER]@server
常用命令:put get
eg:
[root@1inux ~]# sftp root@172.16.66.90
Connecting to 172.16.66.90...
root@172.16.66.90's password: //輸入密碼
sftp> help //可以使用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====================================================================================
七、增強服務端sshd配置指南
1、不要使用默認端口;(修改默認端口為其他端口)
配置文件:/etc/ssh/sshd_config
Port 22
service sshd restart //修改后需要重啟服務
2、不要使用v1版本協議:
Protocol 2
3、限制可登陸的用戶 {需要添加}
AllowUsers:允許登陸的用戶白名單 (多個用戶使用空格隔開)
AllowGroups:允許登陸的組的白名單
DenyUsers
DenyGroups
/etc/ssh/sshd_config
# service sshd reload
==》 獲取配置文件詳細信息;【 man sshd_conifg 】
4、設定空閑會話超時時長:
5、利用防火墻設置ssh訪問策略:
限定ssh服務僅允許***服務器分配有限的地址段內的主機訪問
6、僅監聽特定的IP地址:
7、使用強密碼策略:
[root@1inux ssh]# tr -dc A-Za-z0-9 < /dev/urandom | head -c 30 | xargs
Qe6zOmB2sBNpEONVcKhWS8T4bVrcb0
8、使用基于密鑰的認證;
9、禁止使用空密碼
10、禁止root直接登陸
PermitRootLogin no
11、限制ssh的訪問頻度
12、做好日志、經常做日志分析
/var/log/secure
安裝cygwin后,openssh默認不會安裝。需要在點setup.exe,然后在search里面找到openssh,把父節點都改成uninstall,把openssh那個節點改成install,安裝就可以。
列出Linux種種可用的開源軟件,根據你的需要,選擇性地安裝。默認的都是skip即不安裝,在search里面搜openssh,單擊skip使之變為版本號,表示我們本次將要安裝它。除skip外還有其他4種標志Default、Install、Reinstall和Uninstall,依次代表:默認狀態、安裝、重新安裝和反安裝。我們這次只安裝openssh,如果以后還將其他工具,可以重新點擊setup.exe到這一步來選擇,那時你看到openssh前的默認標記為keep,意思是保持已安裝的軟件不變。
新建系統變量:CYGWIN=ntsec tty
在path中追加C:\cygwin64\bin
點擊桌面上的Cygwin,注意在win7中一定要以管理員身份運行,否則不能創建sshd服務。輸入以下命令
cd /bin ssh-host-config
配置中關鍵注意以下三項:
Should privilege separation be used? (yes/no) no Do you want to install sshd as service? (yes/no) yes Enter the value of cygwin for the daemon:ntsec
下次重啟電腦的時候sshd服務就會自動啟動,如果現在就想啟動該服務,輸入命令:
net start sshd或cygrunsrv -S sshd
上面可以看到亂碼了,只需要把這個bat腳本保存為ANSI格式就可以了,這個前幾天實際上也介紹了,這里就不多說了。
后面會分享更多devops和DBA方面的內容,感興趣的朋友可以關注下~