SSH(远程登录)

Wesley13
• 阅读 845

在linux中SSH服务对应两个配置文件:

SSH(远程登录)

ssh特点:在传输数据的时候,对文件加密后传输。

ssh作用:为远程登录会话和其他网络服务提供安全性协议。

ssh小结:

1、SSH是安全的加密协议,用于远程连接服务器。

2、SSH默认端口是22,安全协议版本有SSH2、SSH1。(SSH1有漏洞)

3、SSH服务端主要包含两个服务功能SSH远程连接和SFTP服务。

4、Linux SSH客户端包含ssh远程连接命令,以及远程拷贝scp命令等。

ssh服务有如下两个工具:

SSH(远程登录)

***服务端或客户端版本不相同是连接不上的***

客户端连接服务端基本口令(-p指定端口,不加为默认端口):

ssh -p22 root@10.0.0.10或ssh root@10.0.0.10

linux通信验证所在地(等第一次登录时会在本地残生一个秘钥文件~/.ssh/known_hosts【多个秘钥】):

cd ~/.ssh/

SSH(远程登录)

SSH默认登录文件相关参数配置

相关参数说明(/etc/ssh/sshd_config):

port  :指定sshd进程监听的端口号,默认为22.可以使用多条指令多个端口。默认为22,可以使用多条指令监听多个端口。默认将在本机的所有网络接口上监听,但是可以通过ListenAddress指定只在特点的接口上监听。

PermitEmptyPasswords  :是否允许密码为空的用户远程登录。默认为“no”。

PermitRootLogin  :是否允许root登录。可用值如下:“without-password”表示使用密码认证登录。“forced-commands-only”表示只有指定了command选项的情况下允许使用公钥认证登录。同时其它认证方法全部禁止。这个值常

用语远程备份之类的事情。(为了安全:不允许root用户登录,但可以登录普通用户使用sudo来执行相应的root命令)

UseDNS  :指定sshd是否应该对远程主机名进行方向解析,以检查此主机名是否与其IP地址真实对应。默认值为“yes”。

在SSH服务中含有有SCP远程拷贝服务:

SCP为远程拷贝文件或目录的命令(命令介绍):

-P(大写)  :接接口号,SSH默认端口为22,如果端口为22可以省略。

-r  :递归,表示拷贝目录。

-p(小写)  :表示在拷贝前后保存文件或目录属性。

-l  :(limit)限速。

例子:

scp -P22 -rp /etc oldboy@10.0.0.10:/tmp

也可实现rsync的推拉操作(例子):

推:scp -P22 -rp /etc oldboy@10.0.0.10:/tmp

拉:scp -P22 -rp oldboy@10.0.0.10:/tmp/etc /data

限速:scp -P22 -rp -l 10 /etc oldboy@10.0.0.10:/tmp

scp小结:

1、scp是加密的远程拷贝,而cp仅为本地拷贝。

2、可以把数据从一台机器推到另一台机器,也可以从其它服务器吧数据拉回到本地执行命令执行命令。

3、每次都是全量完整拷贝,因此,效率不高,适合一次性拷贝用,如果需要增量拷贝,用rsync。

SSH服务附带的sftp功能服务

winds客户端与linux服务器之间的传输数据工具:

1、rz、sz(lrzsz)

2、winscp WinSCP-4.0.5(基于SSH,SFTP)

3、SFX(xshell)

4、SFTP(基于SSH,加密传输)

5、samba,http,ftp,nfs

FTP工具:vsftp、proftpd、SFTP

sftp客户端连接sftp服务方法(不安全):

1、sftp -oPort=22 oldboy@10.0.0.10  #l连接端口

2、cd /home/oldboy  #可以切换指定的目录

3、put /etc/hosts  #把/etc/hosts客户端本地传输到sftp服务器当前连接的目录

4、mkdir /tmp/ett  #也可以创建目录

5、get /etc/hosts /home  #可以下载文件(不指定位置默认下载到原登录时的目录位置)

使用密钥认证的方法步骤:

1、生成密钥(建议在普通用户下生成为了安全):

ssh-keygen -t rsa

SSH(远程登录)

  2、将公钥发送给需要配置密钥的用户(该命令只能发送“公钥=锁”“私钥=钥匙”)

ssh-copy-id -i .ssh/id_rsa.pub "-p52113 names@172.16.1.100"

SSH(远程登录)

  3、启动公钥认证:

修改配置文件/etc/ssh/sshd_config,将“PasswordAuthentication yes”修改为“PasswordAuthentication no”。

4、测试(不用密码发送表示成功):

scp -P52113 hosts names@172.16.1.100:~  #端口号我改成了52113,原先以及拷贝了hosts放在家目录中

SSH(远程登录)

   5、为了安全在普通用户中操作但是没有权限,所有配给该用户sudo的权限

SSH(远程登录)

6、跳转到names用户,然后执行命令测试

ssh -p52113 -t names@172.16.1.100 sudo rsync ~/hosts /etc/hosts  #执行完后,我操作的/etc/hosts,但原先已经拷贝到了家目录,所有直接传递

 SSH(远程登录)

  -t参数是sudo命令需要tty终端;而默认ssh没有;所有ssh加 -t参数分配一个终端sudo的取消默认指向一个终端的命令,如果不想加-t参数可以直接把Defaults  requiretty参数注释掉(为了安全不建议)。路径/etc/sudoers

SSH(远程登录)

非交互式传输:

第一步:安装expect、添加用户及创建密码

yum install expect
useradd oldboy2
echo "oldboy"|passwd --stdin oldboy2
id oldboy2
su - oldboy2

第二步:创建密钥
echo -e "\n"|ssh-keygen -t dsa -P ''

第三步:在管理机编辑 vim ssh_expect.exp添加如下代码
***************************************************
#!/usr/bin/expect
if { $argc != 2 } {
send_user "usage: expect ssh_expect.exp file host\n"
exit
}

#define var
set file [lindex $argv 0]
set host [lindex $argv 1]
set password "oldboy"
#spawn scp /etc/hosts root@10.0.0.142:/etc/hosts
#spawn scp -P52113 $file oldboy@$host:$dir
spawn ssh-copy-id -i $file "-p 52113 oldboy2@$host"
expect {
"yes/no" {send "yes\r";exp_continue}
"*password" {send "$password\r"}
}
expect eof

exit -onexit {
send_user "good bye"
}

***************************************************
第四步:推送公钥
expect ssh_expect.exp ~/.ssh/id_dsa.pub 172.16.1.31

以上服务小结:

1、ssh为加密的远程连接协议。相关软件有openssh、openssl。

2、默认端口号为22.

3、服务端ssh远程连接服务,sftp服务,sshd后湖进程,开机要自启动。

4、ssh客户端包含ssh、scp、sftp命令

5、ssh安全验证方式:口令和密钥,这两种都是基于口令和ssh密钥登录的原理。

6、ssh服务安全优化,修改默认端口22,禁止root远程连接,禁止dns,SSH只监听内网IP。

7、ssh密钥对,公钥在服务器端,比喻就是锁头,私钥在客户端,比喻就是钥匙。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
2年前
Linux应急响应(一):SSH暴力破解
0x00前言SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议,主要用于给远程登录会话数据进行加密,保证数据传输的安全。SSH口令长度太短或者复杂度不够,如仅包含数字,或仅包含字母等,容易被攻击者破解,一旦被攻击者获取,可用来直接登录系统,控制服务器所有权限。0x01应急场景某天,网站
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这