SSH与SCP的使用(一)

SSH与SCP的使用(一)

Scroll Down
请注意,本文发布日期:  263  天前,最后编辑日期:  227  天前,内容可能已经不具有时效性,请酌情参考。

SSH与SCP简介

SSH简介

SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。

传统的网络服务程序,如FTP、POP、telnet在本质上是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。并且这些程序的安全验证方式也有弱点,很容易遭受中间人攻击,使用SSH,会将所有传输的数据进行加密,不仅可以防止中间人攻击,还可以防止DNS欺骗、IP欺骗,传输的数据都是经过压缩的,这样可以加快传输速度,SSH可以为FTP、POP提供一个”安全通道”

SSH目前拥有两个版本:SSHv1和SSHv2,其中SSHv2更加安全,首选SSHv2。想要使用SSH协议来远程管理linux系统,需要部署sshd服务程序,sshd是基于SSH协议开发的一款远程管理服务程序。

SCP简介

SCP(secure copy)命令用于在linux系统之间进行远程复制文件和目录。scp跨服务器传输是加密的(通过ssh进行加密)。openssh工具包中含有的工具。当你服务器硬盘变为只读(read only system)时,scp可以将文件移出来。Scp并不占太多资源,不会给系统造成负荷。

SSH安装与命令

SSH位于openssh工具套件(包含sftp、scp等工具)中,所以我们只需要安装openssh。安装完后,会自启动sshd服务

安装openssh

apt-get install openssh-server

查看sshd服务

service sshd status

SSH命令格式

远程挂载目录:将server上的目录挂载到client上,在client上该目录下的操作等同于server上进行操作

sshfs username@server_ip:filepath localpath
username:服务器用户名
server_ip:服务器IP地址
filepath:服务器目录路径
localpath:本地路径

SCP命令格式

scp [参数] [原路径] [目标路径]

-4:强制scp使用IPV4寻址
-r:传输目录
-P:指定server的sshd监听的端口号
-v:显示详细的连接速度

我经常使用SCP来传输server和client之间的文件或目录:

  1. 从服务器下载文件到本地
scp  username@serverip:/server_filepath /local_filepath
  1. 从本地上传文件到服务器
scp  /local_filepath username@serverip:/server_filepath

sshd服务主配置文件

sshd服务的主配置文件位于/etc/ssh/sshd_config

可修改内容如下:
#Port 22  		sshd服务侦听端口,默认22
#ListenAddress 0.0.0.0   设定sshd服务监听的IP地址(只允许该IP使用SSH登录)

#HostKey /etc/ssh/ssh_host_rsa_key  SSH协议第二版本时,RSA私钥存放的路径
#HostKey /etc/ssh/ssh_host_ecdsa_key  	  ECDSA私钥认证
#HostKey /etc/ssh/ssh_host_ed25519_key  ED25519私钥认证

# 登录
#SyslogFacility AUTH  当用户SSH上系统时,记录信息
#LogLevel INFO

# 认证
#LoginGraceTime 2m  自动断开连接时间:2分钟不输入密码,自动断开
PermitRootLogin yes  允许root用户登录:一般no,出于安全考虑
#StrictModes yes      严格模式:当remote_user的私钥更改时直接拒绝连接
#MaxAuthTries 6      最大密码尝试次数
#MaxSessions 10 		 最大连接终端数

PubkeyAuthentication yes  密钥方式认证

#AuthorizedKeysFile  .ssh/authorized_keys .ssh/authorized_keys2  authorized_keys文件的路径

ChallengeResponseAuthentication no

# Kerberos选项
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no

# GSSAPI 选项
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no
#Banner none  指定banner信息路径:去掉none,填banner文件路径

UseDNS no
AddressFamily inet
SyslogFacility AUTHPRIV 	 
PasswordAuthentication no  密码登录:如果采用了密钥登陆,那么这里填no

值得注意的是,每次修改完/etc/sshd/sshd_config都需要重启sshd服务

service sshd restart

SSH登录方式

SSH提供两种级别的安全验证:基于密码的安全验证、基于密钥的安全验证

基于密码的安全验证

设置账号、密码就可以登陆远程主机,传输的数据会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器,可能有假冒的服务器,容易遭受中间人攻击。并且密码可能会被暴力破解(后面提到的SSH防爆破可用于基于密码的安全验证

远程密码登录:

ssh username@server_ip

基于密钥的安全验证

为了保护SSH服务端口(即端口号22)被暴力破解,依靠密钥,自己创建密钥对(包含公钥和私钥),并把公钥密匙放在需要访问的服务器上,如果想要连接服务器,客户端会像服务器发出请求,请求用你的密钥进行安全验证,服务器收到请求后,先在服务器的主目录下寻找公钥,然后把它和你发送过来的公钥进行比较,如果两个密钥一致,服务器就用公钥加密“challenge”并发送给客户端,客户端收到challenge后,用私钥解密,再发送给服务器。这样避免了中间人攻击,因为他没有私钥!

密钥形式登陆原理:利用密钥生成器制作一对密钥(包含公钥和私钥),将公钥上传至服务器的某个账户上,然后再客户端利用私钥即可完成认证并登陆。这样一来,没有私钥,任何人都无法通过SSH暴力破解你的密码来远程登陆系统,此外将公钥复制到其他账户甚至主机上,利用私钥也可以登录

密钥生成:

ssh-kengen [参数]
-t:加密类型,如RSA、DES
-b:密钥长度,如4096位

基于密钥登录演示:

  1. 制作密钥对
ssh-keygen
Generating public/private rsa key pair.  //创建公私RSA密钥对
Enter file in which to save the key (/root/.ssh/id_rsa):  //输入存放密钥的路径
Enter passphrase (empty for no passphrase): //密钥锁码,可以为空
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa. //私钥位置
Your public key has been saved in /root/.ssh/id_rsa.pub. //公钥位置

Tips:密钥锁码是在使用私钥时必须输入,这样可以保护私钥不被盗用,也可以留空,实现无密码登录。现在在/root/.ssh/目录中有两个密钥文件,id_rsa为私钥、id_rsa.pub为公钥
  1. 公钥放至服务器
#安装公钥
cd .ssh
cat id_rsa.pub >> authorized_keys

安全性考虑:考虑到密钥文件权限的安全性,authorized_keys(即公钥文件)权限600(即只允许root用户rw权限)、.ssh目录权限700
  1. 私钥放至客户端
scp root@149.129.37.30:/root/.ssh/id_rsa /home/yuge/id_rsa
#将id_rsa放入客户端的.ssh目录中
#ssh root@server_ip
  1. 修改sshd_config,允许密钥认证登录
#编辑/etc/ssh/sshd_config文件
PubkeyAuthentication yes //允许密钥认证
PasswordAuthentication no //禁用密码登录
  1. 重启sshd服务
service sshd restart

文章中如有错别字或者错误之处,请评论指出,谢谢!