本文所用系统为 Ubuntu 18.04

什么是SSH?

简单说,SSH是一种网络协议,用于计算机之间的加密登录。全名为:安全外壳协议。为Secure Shell的缩写。SSH为建立在应用层和传输层基础上的安全协议。

如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。

最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。

需要指出的是,SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文针对的实现是OpenSSH,它是自由软件,应用非常广泛。

实现

OpenSSH的安装

检查SSH是否安装:

ssh localhost

通过APT的安装命令非常方便 :

sudo apt install openssh-server

OpenSSH配置文件

如果安装成功以后,有关的配置文件都在/etc/ssh/sshd_config:

sudo gedit /etc/ssh/sshd_config

OpenSSH常用配置文件有两个/etc/ssh/ssh_config 和 /etc/ssh/sshd_config

ssh_config 为客户端配置文件

sshd_config 为服务端配置文件

通过命令对其进行编辑,在配置文件中,那些被注释掉的就是默认配置值。

解除注释(#),修改默认值,(比如Port 改为12345)

配置完成以后,通过以下命令生效

service ssh restart

注:
service ssh start   // 开启SSH服务
service ssh stop    // 停止SSH服务
service ssh restart // 重启SSH服务

可以通过以下命令查看SSH的运行结果

ps -e|grep ssh

SSH命令

常用命令

ssh [-l login_name] [-p port] [user@]hostname

远程但不登入,直接执行命令

方法1:ssh [远程主机用户名]@[远程服务器主机名或IP地址] [命令]

方法2:ssh -l [远程主机用户名] [远程服务器主机名或IP地址] [命令]

例子:远程登录到配置有OpenSSH的主机

由于本Ubuntu是设置在Windows虚拟机上,网络通过桥接。那么相当于,在本局域网内有2个主机:Windows 、 Ubuntu

由于已经搭建了Ubuntu的SSH服务端,那么我们可以在Windows端登录到Ubuntu查看效果。

Windows上用的工具比较多,常见的有:SecureCRT、Putty

如果指定的端口和IP没有错误的话,会弹窗告知远程服务器不可信,是否继续。

点击:“是”,输入用户名和密码,即可看到以下界面:

Welcome to Ubuntu 18.04 LTS (GNU/Linux 4.15.0-20-generic x86_64)

* Documentation:  https://help.ubuntu.com
* Management:     https://landscape.canonical.com
* Support:        https://ubuntu.com/advantage


* Canonical Livepatch is available for installation.
- Reduce system reboots and improve kernel security. Activate at:
https://ubuntu.com/livepatch

269 packages can be updated.
25 updates are security updates.


The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

schips@ubuntu:~$

断开SSH登录有两种方法

Ctrl + D

输入logout

免密登录

配置免密登录的操作在客户端上面进行

假设我们有2台主机,当前登录的机器为192.168.1.100。

要登录的机器为192.168.1.101。

1.在当前的机子(100)上生成Keygen

ssh-keygen -t rsa

会有3次询问,一路回车即可

2.上传第一步公钥到服务器(101)

ssh-copy-id -i ~/.ssh/id_rsa.pub 远程用户名@远程IP

例如:
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.101

完成。

scp 跨机远程拷贝

scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。两台主机之间复制文件必需得同时有两台主机的复制执行帐号和操作权限。

比较适合在免密登录下拷贝

scp命令参数

-1 强制scp命令使用协议ssh1
-2 强制scp命令使用协议ssh2
-4 强制scp命令只使用IPv4寻址
-6 强制scp命令只使用IPv6寻址
-B 使用批处理模式(传输过程中不询问传输口令或短语)
-C 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
-p 留原文件的修改时间,访问时间和访问权限。
-q 不显示传输进度条。
-r 递归复制整个目录。
-v 详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
-c cipher 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
-F ssh_config 指定一个替代的ssh配置文件,此参数直接传递给ssh。
-i identity_file 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
-l limit 限定用户所能使用的带宽,以Kbit/s为单位。
-o ssh_option 如果习惯于使用ssh_config(5)中的参数传递方式,
-P port 注意是大写的P, port是指定数据传输用到的端口号
-S program 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。

scp用法

一般有六种使用方法

本地复制远程文件:(把远程的文件复制到本地)

scp root@www.test.com:/val/test/test.tar.gz /val/test/test.tar.gz

远程复制本地文件:(把本地的文件复制到远程主机上)

scp /val/test.tar.gz root@www.test.com:/val/test.tar.gz

本地复制远程目录:(把远程的目录复制到本地)

scp -r root@www.test.com:/val/test/ /val/test/

远程复制本地目录:(把本地的目录复制到远程主机上)

scp -r ./ubuntu_env/ root@192.168.0.111:/home/pipi

pika:/media/pika/files/machine_learning/datasets$scp -r SocialNetworks/ piting@192.168.0.172:/media/data/pipi/datasets

本地复制远程文件到指定目录:(把远程的文件复制到本地)

scp root@www.test.com:/val/test/test.tar.gz /val/test/

远程复制本地文件到指定目录:(把本地的文件复制到远程主机上)

scp /val/test.tar.gz root@www.test.com:/val/

ps: scp复制文件时只指定服务器地址不加路径默认复制到哪里???

附录:SSH服务器常用配置设置

使用的命令:

sudo vi /etc/ssh/sshd_config

对应的修改项目

配置名

意义

备注

Port

使用的端口

可以通过添加多行以支持多个端口 Port 123 Port 456

ListenAddress

监听的IP地址

Protocol

支持的SSH协议版本

Protocol 2,1 // 同时支持1,2 Protocol 2 // 使用SSH版本2

PermitRootLogin

是否允许root(建议no)

PermitEmptyPasswords

允许空密码登录(建议no)

PasswordAuthentication

允许使用密码配置(建议yes)

StrictModes

使用者的hot key改变以后否是仍然接受联机(默认yes)

PubkeyAuthentication

是否允许Public Key

仅针对 version 2

LoginGraceTime

多久时间没有连上的的断线时间

单位 m分钟 h小时,s秒(默认)

PrintLastLog

显示上一次登录的信息

Last login: Wed Mar 23 22:12:58 2016 from 192.168.1.100

关于Shell变量传递、防暴力破解等设置略。

变量传递指的是:将本地的环境变量(比如$1等)传递到ssh命令中进行执行(而不是使用远程SSH的环境变量)

防暴力破解主要使用的是 fail2ban 对网络环境进行设置

如果说我的文章对你有用,只不过是我站在巨人的肩膀上再继续努力罢了。
若在页首无特别声明,本篇文章由 Schips 经过整理后发布。