SSH 的简介
SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定。SSH 为建立在应用层和传输层基础上的安全协议,而传统的网络服务程序(如:FTP、POP 和 Telnet) 则是不安全的。因为它们在网络上用明文传送数据、用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击。我们调试 ARM 开发板时,常用串口作为调试终端;当使用 SSH 连接时,就是网络调试终端机(开发板为服务端,电脑为客户端),如果开发板有广域网 IP,则可以实现远程网络调试(远程网络终端)。
网文:SSH的安装及使用
Ubuntu 平台
1、ssh 的安装
SSH 包含服务端和客户端,原版 SSH 服务端是要收费的,因为受版权和加密算法的限制,现在很多人都转而使用 OpenSSH。OpenSSH 是 SSH 的替代软件,而且是免费的。Ubuntu 缺省已经安装了客户端(如果没安装则参考下面方法安装),但服务端需要我们手动安装。
1
2
3
4
5
6
|
#SSH客户端安装
sudo apt-get install ssh #安装SSH客户端(其服务端非免费)
sudo apt-get install openssh-client #安装SSH客户端(OpenSSH是SSH的替代软件,而且是免费的,推荐使用)
#SSH服务端安装
sudo apt-get install openssh-server #安装SSH服务端
|
2、ssh 的配置
一般情况下,不需要修改相关配置,如果需要开放或关闭一些权限,则就需要我们修改 SSH 服务端相关配置内容。
1
2
3
4
5
6
7
8
9
10
11
|
sudo gedit /etc/ssh/sshd_config #配置SSH服务端(常规配置内容请看下面介绍)
#常规配置内容
Port 22 #连接端口 (默认:22)
Protocol 2,1 #如果删除“,1”,只允许 SSH2 方式的连接
ServerKeyBits 1024 #定义服务端密匙的位数(默认:1024)
PermitRootLogin prohibit-password #登记方式 (yes:允许root用户登录)
PermitEmptyPasswords no #禁止空密码进行登录 (默认:no )
PasswordAuthentication yes #允许密码方式的登录 (默认:yes)
PubkeyAuthentication yes #允许ssh的公钥登录验证(默认:yes)
RSAAuthentication yes #允许RSA登录验证 (默认:yes)
|
3、ssh 的开启
SSH 服务端安装后,需要我们手动启动运行,否则客户端无法连接服务端。
如果开启了系统防火墙(Firewall)将可能影响 SSH 服务,请关闭它(需要重启设备):
● sudo ufw disable
#关闭防火墙
● sudo ufw status
#查看防火墙状态
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
sudo /etc/init.d/ssh start #启动SSH服务端
ps -e | grep sshd #查看SSH服务端进程(如果有[sshd]表明启动成功)
#其它常用命令:
sudo /etc/init.d/ssh start #启动SSH服务端
sudo /etc/init.d/ssh restart #重启SSH服务端(例如修改配置后需要重启一下)
sudo /etc/init.d/ssh stop #关闭SSH服务端
#或者
sudo service ssh start #启动SSH服务端
sudo service ssh restart #重启SSH服务端(例如修改配置后需要重启一下)
sudo service ssh stop #关闭SSH服务端
#开机自动启动ssh服务的方法:
sudo gedit /etc/rc.local #打开启动文件,在文件中加入:
/etc/init.d/ssh start
|
更多开机启动知识:
1、Linux系统中设置开机自动运行的两种方法
2、linux设置开机启动项两种方式
4、ssh 的登录
SSH 登录主要有两方式(注:由服务端配置决定),一是使用账号及密码登陆,二是使用秘钥文件登陆。
关于 SSH 秘钥有两个文件:id_rsa(私钥 private key)和 id_rsa.pub(公钥 public key)。公钥相当于锁,私钥相当于钥匙,要想做到 SSH 免密登录,我们要先将锁装到服务器,然后客户端就可以利用这个钥匙开锁了。即是服务器装锁(公钥),客户端拿钥匙(私钥)。
在创建秘钥中,先提示存储路径再要求设置私钥密码,此密钥锁码表示在使用私钥时必须输入,这样就可以保护私钥不被盗用。当然,也可以留空,实现无密码登录(注:个人使用一般是无密码登录)。
在 win 系统下的 SecureCRT 终端机软件如何使用私钥登录 SSH,配置:选项
→ 会话选项
→ 连接
/SSH2
→ 右窗口选择公钥
→ 属性
,在打开窗口的使用身份或证书文件
加入之前制作的私钥文件(如:D:\Downloads\id_rsa)。(如图)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#账号密码登陆
ssh root@192.168.1.20 #SSH客户端使用root超级用户登录(注:需要服务端开启权限)
ssh xiaomi@192.168.1.20 #SSH客户端使用账号为xiaomi登录(之后按提示输入密码即可)
ssh -p 1234 xiaomi@192.168.1.20 #SSH客户端使用指定端口1234及账号xiaomi登录
exit #SSH客户端登出
#秘钥文件登陆 -> 制作密钥对(本例在服务器上制作)
ssh-keygen #创建SSH默认RSA秘钥(弹出的提示全都回车确认即可,秘钥存储路径在弹出信息有指出)
ssh-keygen -t rsa #创建SSH指定RSA秘钥(在用户的.ssh目录下发现id_rsa,id_rsa.pub就是创建的秘钥)
#秘钥文件登陆 -> 在服务器上安装公钥
cd ~/.ssh #进入秘钥存储路径
cat id_rsa.pub >> authorized_keys #在服务器上安装公钥(authorized /ˈɔːθəraɪzd/ 经授权的)
chmod 600 authorized_keys #修改文件(夹)权限,确保其权限正确性
chmod 700 ~/.ssh #修改文件(夹)权限,确保其权限正确性
#秘钥文件登陆 ->(本例在服务器上使用另一个终端机作为客户端登录)
ssh -i ~/.ssh/id_rsa xiaomi@192.168.1.20 #SSH客户端使用秘钥文件登陆(-i 指定秘钥文件)
|
参考网文:
SecureCRT通过密钥进行SSH登录
5、ssh 的sftp功能
sftp 为 SSH 的一部分,我们可以使用它来实现服务端与客户端之间传输文件。与 SSH 一样,使用 sftp 客户端登录服务端(不要在 SSH 客户端里直接使用命令 sftp 登录服务端,否则就是本地与远程设备都是服务端了)。在 win 系统下如何在 SecureCRT 终端机软件打开 sftp 服务?首先使用 SSH 建立连接后,配置:选项
→ 会话选项
→ 连接
/SSH2
/SFTP标签页
→ 右窗口配置本地目录
与远程目录
,然后右键点击 SSH 终端窗口标签 → 连接SFTP标签页,即可打开 SFTP 终端机。(如图)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
sftp -oPort=22 xiaomi@192.168.1.20 #sftp客户端登录服务端(端口:22, 账号:xiaomi, IP:192.168.1.20)
put /etc/md5.c /tmp #sftp客户端上传文件: 客户端 /etc/md5.c -> 服务端 /tmp(路径)
get /etc/md5.c /home/omd #sftp客户端下载文件: 服务端 /etc/md5.c -> 客户端 /home/omd(路径)
put -r /etc/hosts /tmp #sftp客户端上传文件夹:客户端 /etc/hosts -> 服务端 /tmp
get -r /etc/hosts /home/omd #sftp客户端下载文件夹:服务端 /etc/hosts -> 客户端 /home/omd
ls #sftp客户端查看远程目录文件
lls #sftp客户端查看本地目录文件
cd abc #sftp客户端进入远程目录路径abc
lcd abc #sftp客户端改变本地目录路径abc
pwd #sftp客户端查看远程所在路径
lpwd #sftp客户端查看本地所在路径
mkdir abc #sftp客户端创建远程文件夹
lmkdir abc #sftp客户端创建本地文件夹
quit #sftp客户端登出
|
发现问题:
- 实际使用中发现
get -r
下载文件夹出现有些文件多了些回车符,不明是什么原因。
- 无法下载隐藏文件(夹),例如:git 仓库文件夹
.git
解决方法:
- 目前想到的解决办法,就是使用
tar
压缩文件夹,再下载压缩文件。