SSH的两种登录方式以及配置
前言 SSH简介
Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在应用层基础上的安全网络协议。它是专为远程登录会话(甚至可以用Windows远程登录Linux服务器进行文件互传)和其他网络服务提供安全性的协议,可有效弥补网络中的漏洞。通过SSH,可以把所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。目前已经成为Linux系统的标准配置。
SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文主要介绍OpenSSH免费开源软件,如果要在Windows中使用SSH,需要使用另一个软件PuTTY。
SSH的优势,网络传输服务程序不止有SSH,还有很多。FTP、Pop和Telnet其本质上都是不安全的;因为它们在网络上用明文传送数据、用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击。SSH可以通过RSA加密对传输内容加密,并且压缩,所以相对较快、较安全。
SSH的验证方式有两种:帐密验证和公钥私钥验证,第二种方式相对较安全。
一、SSH服务程序
相关联的RPM包:openssh(底层包) 、 openssh-clients 、 openssh-server
服务器端安装: yum install openssh-server (安装了openssh-server会自动安装openssh)
客户端安装: yum install openssh-clients (安装了openssh-clients 会自动安装openssh)
卸载: yum remove openssh (卸载了openssh,然后会自动卸载openssh-server和openssh-clients)
服务:/usr/sbin/sshd
服务端口:tcp / 22
服务器端配置文件:/etc/ssh/sshd_config
客户端配置文件: /etc/ssh/ssh_config
用法:ssh -p 22 root@192.168.10.10 ,如果配置文件中 /etc/ssh/ssh_config 默认是22号端口,则可以直接 ssh root@192.168.10.10
服务开启/关闭/重启/开机自启/开启不自启: systemctl start / stop / restart / enable / disable sshd
ssh服务端的配置文件(部分): /etc/ssh/sshd_config
#Port 22 //默认的端口号为22 修改端口时,取消注释
#LoginGraceTime 2m //ssh登录时,密码验证的超时时间,默认2分钟
#PermitRootLogin yes //是否允许以root用户身份登录
#MaxAuthTries 6 //最大认证次数
#MaxSessions 10 //登录Sessions保持的天数
#PermitEmptyPasswords no //是否允许空密码
PasswordAuthentication yes //开启密码认证
我们需要修改配置的时候,最终极办法就是修改完配置文件直接重启就行service sshd restart
命令可以检查SSH服务是否开启 ps -e | grep ssh
二、口令连接
-p命令可以指定连接的端口 ssh -p 1234 name@192.168.0.1
然后输入该用户的面即可
图形用户界面的连接更加简单,不做讲述。
三、公钥登录
在主机A上,使用 ssh-keygen,然后输入保存的文件名(默认为id_rsa)和自己的私钥,完成之后会在 ~/.ssh/ 生成的两个密钥: id_rsa(私钥) 和 id_rsa.pub(公钥)
私钥(id_rsa)保存在本地主机,公钥(id_rsa.pub)通过 ssh-copy-id root@192.168.1.200 会自动传递到对端B主机的~/.ssh/目录下,并且自动重命名为 authorized_keys
登录目标主机: ssh root@192.168.1.200 使用刚刚输入的私钥登录
具体:
1、在本机生成密钥对
使用ssh-keygen命令生成密钥对:
ssh-keygen -t rsa #-t表示类型选项,这里采用rsa加密算法
然后根据提示一步步的按enter键即可(其中有一个提示是要求设置私钥口令passphrase,不设置则为空,这里看心情吧,如果不放心私钥的安全可以设置一下),执行结束以后会在 /home/当前用户 目录下生成一个 .ssh 文件夹,其中包含私钥文件 id_rsa 和公钥文件 id_rsa.pub。
2、将公钥复制到远程主机中
使用ssh-copy-id命令将公钥复制到远程主机。ssh-copy-id会将公钥写到远程主机的 ~/ .ssh/authorized_key 文件中
ssh-copy-id ldz@192.168.0.1
四、SSH应用
1、可以利用 nohup + 需要运行的程序 使运行的程序在切断ssh连接的时候仍然能够继续在远程主机中运行。nohup即no hang up(不挂起)。
2、scap、put、get等跨主机传输文件
3、绑定本地端口
$ ssh -D 8080 user@host
SSH会建立一个socket,去监听本地的8080端口。一旦有数据传向8080端口,就自动把它转移到SSH连接上面,发往远程主机。可以想象,如果8080端口原来是一个不加密端口,现在将变成一个加密端口。
根据柚子皮的例子:
有时,绑定本地端口还不够,还必须指定数据传送的目标主机,从而形成点对点的"端口转发"。为了区别后文的"远程端口转发",我们把这种情况称为"本地端口转发"(Local forwarding)。
假定host1是本地主机,host2是远程主机。由于种种原因,这两台主机之间无法连通。但是,另外还有一台host3,可以同时连通前面两台主机。因此,很自然的想法就是,通过host3,将host1连上host2。
我们在host1执行下面的命令:
$ ssh -L 2121:host2:21 host3
命令中的L参数一共接受三个值,分别是"本地端口:目标主机:目标主机端口",它们之间用冒号分隔。这条命令的意思,就是指定SSH绑定本地端口2121,然后指定host3将所有的数据,转发到目标主机host2的21端口(假定host2运行FTP,默认端口为21)。
这样一来,我们只要连接host1的2121端口,就等于连上了host2的21端口。
$ ftp localhost:2121
"本地端口转发"使得host1和host3之间仿佛形成一个数据传输的秘密隧道,因此又被称为"SSH隧道"。
下面是一个比较有趣的例子。
$ ssh -L 5900:localhost:5900 host3
它表示将本机的5900端口绑定host3的5900端口(这里的localhost指的是host3,因为目标主机是相对host3而言的)。
另一个例子是通过host3的端口转发,ssh登录host2。
$ ssh -L 9001:host2:22 host3
这时,只要ssh登录本机的9001端口,就相当于登录host2了。
$ ssh -p 9001 localhost
上面的-p参数表示指定登录端口。
出错处理:ssh: Could not resolve hostname 192.168.*.*:***: Name or service not known
解决:指定端口不能直接使用ip:端口号,使用-p参数来解决就可以了。
4、远程端口转发(来自柚子皮)
远程端口转发
既然"本地端口转发"是指绑定本地端口的转发,那么"远程端口转发"(remote forwarding)当然是指绑定远程端口的转发。
还是接着看上面那个例子,host1与host2之间无法连通,必须借助host3转发。但是,特殊情况出现了,host3是一台内网机器,它可以连接外网的host1,但是反过来就不行,外网的host1连不上内网的host3。这时,"本地端口转发"就不能用了,怎么办?
解决办法是,既然host3可以连host1,那么就从host3上建立与host1的SSH连接,然后在host1上使用这条连接就可以了。
我们在host3执行下面的命令:
$ ssh -R 2121:host2:21 host1
R参数也是接受三个值,分别是"远程主机端口:目标主机:目标主机端口"。这条命令的意思,就是让host1监听它自己的2121端口,然后将所有数据经由host3,转发到host2的21端口。由于对于host3来说,host1是远程主机,所以这种情况就被称为"远程端口绑定"。
绑定之后,我们在host1就可以连接host2了:
$ ftp localhost:2121
这里必须指出,"远程端口转发"的前提条件是,host1和host3两台主机都有sshD和ssh客户端。
SSH的两种登录方式以及配置的更多相关文章
- SSH的两种登录方式
ssh客户端使用的是Xshell,windows环境. 第一种方式,用户名密码方式 原理如下: 客户端发起ssh请求之后,服务器把自己的公钥传给客户端 客户端输入服务器密码通过公钥加密之后传给服务器 ...
- [转] SSH两种登录方式(公私钥)解析
转自:https://www.cnblogs.com/hukey/p/6248468.html SSH登录方式主要分为两种: 1. 用户名密码验证方式 说明: (1) 当客户端发起ssh请求,服务器会 ...
- SQLPlus的两种登录方式的不同效果
Windows 8,Oralce11g,命令行 1.输入“sqlplus”,回车,提示:请输入用户名,输入用户名,回车,提示,请输入口令,输入口令后,回车,报ORA-12560:TNS:协议适配器错误 ...
- reportConfig.xml两种数据源连接的配置方式
在reportConfig.xml配置文件中,我们提供了两种数据源连接的配置方式,分别如下: 1.jndi数据源配置(即:在dataSource中配置) 此配置适用于在j2ee的服务器中配置了j ...
- wdcp支持两种安装方式
v3.2版本已发布,支持多PHP版本共存共用,支持SSL证书,更多可看论坛 v3版讨论区 更多安装说明请看 http://www.wdlinux.cn/bbs/thread-57643-1-1.htm ...
- Linux 下wdcp支持两种安装方式
wdcp支持两种安装方式1 源码编译 此安装比较麻烦和耗时,一般是20分钟至一个小时不等,具体视机器配置情况而定2 RPM包安装 简单快速,下载快的话,几分钟就可以完成源码安装(ssh登录服务器,执行 ...
- Spring Security构建Rest服务-1202-Spring Security OAuth开发APP认证框架之重构3种登录方式
SpringSecurityOAuth核心源码解析 蓝色表示接口,绿色表示类 1,TokenEndpoint 整个入口点,相当于一个controller,不同的授权模式获取token的地址都是 /oa ...
- Redis两种持久化方式(RDB&AOF)
爬虫和转载请注明原文地址;博客园蜗牛:http://www.cnblogs.com/tdws/p/5754706.html Redis所需内存 超过可用内存怎么办 Redis修改数据多线程并发—Red ...
- struts2+spring的两种整合方式
也许有些人会因为学习了struts1,会以为struts2.struts1与spring的整合也是一样的,其实这两者相差甚远.下面就来讲解一下struts2与spring的整合两种方案.(部分转载,里 ...
随机推荐
- JAVA学习之Java程序开发初次体验
Java环境搭建算完成了,那么接下来写个Java程序走一个 开发Java程序的简单流程 1.将Java代码编写到扩展名为.java的文件中2.通过javac命令对该Java文件进行编译(生成class ...
- 拾遗:Qemu/KVM
WinXP: #!/bin/bash name=winxp qemu-system-x86_64 \ -enable-kvm \ -cpu host -smp ,sockets=,cores=,thr ...
- .ssh 别名连接
参考ssh支持配置 man ssh_config 配置模板 vim ~/.ssh/config Host <别名> Port <机器端口号> IdentityFile < ...
- P3224 [HNOI2012]永无乡(平衡树合并)
题目描述 永无乡包含 nn 座岛,编号从 11 到 nn ,每座岛都有自己的独一无二的重要度,按照重要度可以将这 nn 座岛排名,名次用 11 到 nn 来表示.某些岛之间由巨大的桥连接,通过桥可以从 ...
- .Net平台调用の初识
前言 工作过程中难免遇到混合编程,现在我们要谈的是C#和c++语言的编程.C#要调用C++的库目前可选主要有两种方式:Com技术和平台调用(P/Invoke).现在我们要谈的是P/Invoke技术. ...
- C#实体类克隆
public static T Clone<T>(T source) { if (!typeof(T).IsSerializable) { throw new ArgumentExcept ...
- OneDrive一直后台占用CPU的一种解决办法
系统版本:Windows 7 ultimate x64 Onedrive版本:17.3.6998.0830 最近发现Onedrive一直在后台占用15%左右的CPU,很是觉得奇怪,网上的解决方案是删除 ...
- uboot刷机
ath> tftp xx.zpk Trying eth0 Using eth0 device TFTP from server 192.168.1.104; our IP address is ...
- redis数据备份还原
安装ruby yum install ruby rubygems ruby-devel -y 安装rvm gpg2 --keyserver hkp://pool.sks-keyservers.net ...
- DataTable转对象Model
我们经常需要从数据库表中取数,取数是以取DataTable的方式,但是我么希望以对象为单位进行这种操作.即存在把取到的DataTable(数据表)转换为ModelList(对象集合)的需求. 原理稍微 ...