目录

linux 网络终端工具 ssh

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客户端登出

发现问题:

  1. 实际使用中发现get -r下载文件夹出现有些文件多了些回车符,不明是什么原因。
  2. 无法下载隐藏文件(夹),例如:git 仓库文件夹.git

解决方法:

  • 目前想到的解决办法,就是使用tar压缩文件夹,再下载压缩文件。