Linux远程连接工具-OpenSSH

在我们日常管理与维护服务器个过程中,我们都需要使用远程连接工具,今天我们就一同来总结下Linux常用的安全远程连接工具-OpenSSH。

【远程登录协议】

1、telnet:是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。默认使用的是TCP的23号端口,采用C/S架构,在用户登录的过程中传输的信息都是明文信息,安全无法保障,所以不建议用telnet。

2、ssh:为Secure Shell 的缩写,由IETF的网络工作小组所制定;SSH 为建立在应用层和传输层基础上的安全协议。SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。默认使用的是TCP的22号端口,也是基于C/S架构,SSH有两个版本v1与v2。

sshv1:基于CRC-32做MAC(消息摘要认证),不安全,强烈建议不使用;

sshv2:基于双方主机的协商选择使用最安全的MAC方式 ,其有如下特点:1、加密机制及MAC机制由双方协商选定;2、基于DH实现密钥交换,基于RSA或DSA实现身份认证;3、客户端通过检查服务器端的主机密钥来判断是否能够继续通信;

【OpenSSH简述】

OpenSSH 是一组用于安全地访问远程计算机的连接工具。它可以作为rlogin、rsh rcp以及telnet的直接替代品使用。更进一步,其他任何TCP/IP连接都可以通过SSH安全地进行隧道/转发。OpenSSH 对所有的传输进行加密,从而有效地阻止了窃听、连接劫持,以及其他网络级的攻击。OpenSSH 由 OpenBSD project 维护。

登录过程和使用rlogin或telnet建立的会话非常类似。在连接时,SSH 会利用一个密钥指纹系统来验证服务器的真实性。只有在第一次连接时,用户会被要求输入yes进行确认,之后的连接将会验证预先保存下来的密钥指纹。如果保存的指纹与登录时接收到的不符, 则将会给出警告。 指纹保存在 ~/.ssh/known_hosts中,对于SSHv2指纹,则是 ~/.ssh/known_hosts2。

默认情况下,较新版本的OpenSSH只接受SSHv2连接。如果能用版本2则客户程序会自动使用,否则它会返回使用版本1的模式。此外,也可以通过命令行参数-1或-2来相应地强制使用版本1或2。 保持客户端的版本1能力是为了考虑较早版本的兼容性,建议尽量使用版本2。

【SSH服务器和客户端工作流程】

OpenSSH使用C/S架构:

服务端工具(S):sshd

客户端工具(C):ssh命令、putty、xshell、securecrt、sshshellclient;

OpenSSH客户端组件-ssh

配置文本:/etc/ssh/ssh_config

使用方法:

ssh [[email protected]] host [COMMAND]或 ssh -l username host [COMMAND]

-p PORT:指定远程服务器端口;

-l username:指定登录远程主机的用户,不指定则使用当前用户;

[email protected]:等同于 -l username;

如果设置了COMMAND,表示使用username账户登录远程主机执行一次指定的命令并返回结果,不会停留在远程主机上;

[[email protected] ~]# ssh 192.168.0.110 #使用root用户登录;
The authenticity of host ‘192.168.0.110 (192.168.0.110)‘ can‘t be established.
RSA key fingerprint is 01:2e:43:cc:bc:1d:f1:e5:f0:f4:89:78:74:a9:49:44.
Are you sure you want to continue connecting (yes/no)? yes #第一次连接,需手动进行确认;
Warning: Permanently added ‘192.168.0.110‘ (RSA) to the list of known hosts.
[email protected]‘s password: #输入远程主机root账户的密码;
Last login: Mon May 11 16:44:52 2015 from 192.168.0.104
[[email protected] ~]#  #登录成功了,远程主机名为mailCentOS6;
[[email protected] ~]# ls #显示远程主机root家目录下的文件;
2.sh             boot.iso  install.log         sdb.mbr     test1
anaconda-ks.cfg  crontab   install.log.syslog  \temp\test
[[email protected] ~]# exit #退出登录;
logout
Connection to 192.168.0.110 closed.
[[email protected] ~]# ssh [email protected] ls #使用root登录远程主机,执行一次ls命令,返回结果便退出;
[email protected]‘s password: #第二次连接,就不需要输入yes了,直接输入密码即可;
2.sh
anaconda-ks.cfg
boot.iso
crontab
install.log
install.log.syslog
sdb.mbr
\temp\test
test1
[[email protected] ~]#  #看到了吗,我们当前并没有登录在远程主机;

OpenSSH服务器端组件-sshd

配置文件:/etc/ssh/sshd_config(通过修改此文件可以修改ssh的默认监听端口与其他参数)

服务脚本:/etc/rc.d/init.d/sshd

服务启动|停止|重启:serveice sshd start|stop|restart

脚本配置文件:/etc/sysconfig/sshd

配置参数

# man sshd_config  查看配置参数的说明;

# vim /etc/sysconfig/sshd  通过编辑配置文件来修改配置参数;

#+空格+文字:以此格式开头的行表示改行为注释说明;

#+文字:以此格式开头的行表示可启用选项,不改变则表示使用该选项的默认设置,反之使用设定值“#”要去掉哦!

例:#Port 22 如不去掉#且22不变,表示使用默认的22号端口;

若把#Port 22改成port 7777,表示把sshd的监听端口改成7777;

注意:修改参数与配置后,必须重启服务(service sshd restart).

经常需要修改的参数:

[[email protected] ~]# cat /etc/ssh/sshd_config
#	$OpenBSD: sshd_config,v 1.80 2008/07/02 02:24:18 djm Exp $
 
# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.
 
# This sshd was compiled with PATH=/usr/local/bin:/bin:/usr/bin
 
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options change a
# default value.
 
#Port 22  #修改默认监听的端口;
port 7777 #把sshd的监听端口改成7777;
#AddressFamily any   #监听的地址家族,指定是监听在IPV4上还是IPV6上,any表示所有;
#ListenAddress 0.0.0.0  #指定监听的地址 (0.0.0.0表示本机的所有地址);
#ListenAddress :: 
 
# Disable legacy (protocol version 1) support in the server for new
# installations. In future the default will change to require explicit
# activation of protocol 1
Protocol 2
 
# HostKey for protocol version 1 
#HostKey /etc/ssh/ssh_host_key #使用shhv1用到的主机密钥;
# HostKeys for protocol version 2
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
 
# Lifetime and size of ephemeral version 1 server key
#KeyRegenerationInterval 1h
#ServerKeyBits 1024 #密钥长度;
 
# Logging
# obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
SyslogFacility AUTHPRIV
#LogLevel INFO
 
# Authentication:
 
#LoginGraceTime 2m #登录宽限期;
#PermitRootLogin yes #是否允许管理员直接登录;
#StrictModes yes
#MaxAuthTries 6 #最大密码输入错误次数;
#MaxSessions 10 #最大会话个数;
 
#RSAAuthentication yes  #是否允许使用RSA机制来认证;
#PubkeyAuthentication yes
#--------中间不长改变的配置参数略----------

Subsystem	sftp	/usr/libexec/openssh/sftp-server  #表示是否启动sftp功能;
 
# Example of overriding settings on a per-user basis
#Match User anoncvs
#	X11Forwarding no
#	AllowTcpForwarding no
#	ForceCommand cvs server

sshd认证方式:

1、基于口令的认证;

2、基于密钥的认证;

# ssh-keygen -t rsa   用rsa算法生成密钥,默认密钥为id_rsa(私钥), id_rsa.pub(公钥)

# ssh-keygen -f /path/to/somefile -P oldpassword 根据现有的密钥文件生成密钥

-f /path/to/somefile: 密钥文件保存在的位置;

-P ‘‘: 指定生成旧密钥时使用的密码;

方法一:把本地主机生成的公钥 id_rsa.pub使用scp复制到远程主机的上,在远程主机使用cat id_rsa.pub>>.ssh/authorized_keys追加该公钥信息,这样就可以实现基于密钥认证的ssh登录;

方法二:# ssh-copy-id -i .ssh/id_rsa.pub [email protected]

[[email protected] ~]# ssh-keygen -t rsa #用rsa算法生成密钥;
Generating public/private rsa key pair.
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.
The key fingerprint is:
c2:f9:c2:3d:4d:ca:52:39:7a:a7:33:de:42:11:d3:8f [email protected]
The key‘s randomart image is:
+--[ RSA 2048]----+
|         .       |
|        o .      |
|         o o     |
|     . ...E .    |
|      + S..      |
|     . B.=       |
|      =.B o      |
|       ++=       |
|       .o+.      |
+-----------------+
[[email protected] ~]# ssh-keygen -f  .ssh/id_rsa -P ‘‘ #根据现有密钥文件重新生成密钥;
Generating public/private rsa key pair.
.ssh/id_rsa already exists.
Overwrite (y/n)? y #提示是否确定要覆盖;
Your identification has been saved in .ssh/id_rsa.
Your public key has been saved in .ssh/id_rsa.pub.
The key fingerprint is:
bf:55:f0:0b:a5:ee:4e:4a:1d:d3:b1:0e:66:ee:55:9b [email protected]
The key‘s randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|            . o  |
|             * o |
|        S   O = .|
|         . * B oo|
|          o * +E |
|         . B .   |
|          o.+    |
+-----------------+
#-----使用方法一:实现通过密钥文件完成身份验证(不需要输入密码)-----
[[email protected] ~]# scp .ssh/id_rsa.pub [email protected]:/root/ #使用spc命令复制公钥文件到远程
#主机的用户家目录下的.ss/路径下;
[email protected]‘s password: #输入登录远程主机的密码;
id_rsa.pub                          100%  397     0.4KB/s   00:00 #提示复制成功;
[[email protected] ~]# ls .ssh/ #验证确认文件复制成功;
id_rsa.pub  known_hosts
[[email protected] ~]# touch .ssh/authorized_keys #路径内没有自动验证密钥文件,创建一个;
[[email protected] ~]# cat .ssh/id_rsa.pub >> .ssh/authorized_keys #把公钥追加到自动验证密钥文件;
[[email protected] ~]# ssh 192.168.0.110
Last login: Mon May 11 20:45:10 2015 from 192.168.0.111
[[email protected] ~]# #OK了,看到了没有,不用输入密码我们就直接可以远程登录了!!

#-----使用方法二:实现通过密钥文件完成身份验证(不需要输入密码)-----
[[email protected] ~]# rm -f .ssh/authorized_keys  #删除原有保存的自动验证密钥文件;
[[email protected] ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected] #使用命令自动传输生成自动验证密钥文件;
[email protected]‘s password: 
Now try logging into the machine, with "ssh ‘[email protected]‘", and check in:

  .ssh/authorized_keys #提示生成的文件;

to make sure we haven‘t added extra keys that you weren‘t expecting.

[[email protected] ~]# ssh 192.168.0.110 #验证看看是否可以登录;
Last login: Mon May 11 21:02:29 2015 from 192.168.0.111
[[email protected] ~]# ls .ssh/  #看到了没有,我们现在已经登录到了mailCentOS6这台主机上了;
authorized_keys  known_hosts

【命令补充

    scp: 利用ssh协议在主机之间实现安全文件传输的工具

scp SRC1... DEST

分两种情形:

1、源文件在本机,目标为远程主机

# scp /path/to/somefile... [email protected]:/path/to/somewhere

源可以是目录或文件有多个,目标必须是目录

2、源文件在远程,本地为目标

# scp [email protected]:/path/to/somewhere /path/to/somewhere

-r: 复制目录时使用(实现递归复制),scp默认不能复制目录;

-p: 保持源文件的元数据信息,包括mode和timestamp

-q: 静默模式,复制过程不显示状态信息;

-p PORT: 指定ssh协议监听的端口(远程主机)。



好了,大概就总结说明这些了,如有不尽之处,还请各位大神海涵,欢迎拍砖~!!~

时间: 2024-12-27 02:26:05

Linux远程连接工具-OpenSSH的相关文章

linux 远程连接工具——MTPuTTY

简介 MTPUTTY是一个非常流行的ssh客户端. 安装 官网地址:http://www.ttyplus.com/multi-tabbed-putty/ 下载并安装,运行软件,如图 添加服务器 结语 该工具可以连接多个服务器,非常方便.

linux基础知识——远程连接工具

远程连接工具: 1.xftp和xshell 2.下载安装xftp和xshell ? ? 下载地址: ????? ? xftp:https://download.csdn.net/download/qq_37725650/10185598 xshell:https://download.csdn.net/download/qq_37725650/10427433 安装:默认安装即可 3.安装完成之后,首先打开xftp 4.新建一个远程会话,输入连接信息,选项中设置下编码,确定 选项中设置下编码 确

远程连接工具SSH和linux的连接

实际开发中,Linux服务器都在其他的地方,我们要通过远程的方式去连接Linux并操作它,Linux远程的操作工具有很多,企业中常用的有Puttty.secureCRT.SSH Secure等.我使用SSH Secure工具进行远程连接,该工具是免费的图形化界面及命令行窗口集一身的远程工具. SSH Secure是什么百度百科有更详细的解答.https://baike.baidu.com/item/ssh/10407?fr=aladdin 远程工具SSH与linux的连接困扰了我好几天,终于解决

Linux(Centos)配置OpenSSH无密码登陆

最近在搭建Hadoop环境需要设置无密码登陆,所谓无密码登陆其实是指通过证书认证的方式登陆,使用一种被称为"公私钥"认证的方式来进行ssh登录. 在linux系统中,ssh是远程登录的默认工具,因为该工具的协议使用了RSA/DSA的加密算法.该工具做linux系统的远程管理是非常安全的.telnet,因为其不安全性,在linux系统中被搁置使用了. " 公私钥"认证方式简单的解释:首先在客户端上创建一对公私钥 (公钥文件:~/.ssh/id_rsa.pub: 私钥文

linux远程连接客户端总结

序:刚从阿里ECS买了一个ubuntu14.04_64_20G,但是没有提供页面登陆工具,因此从网上找了几个远程连接工具,特写在这里算是总结. 1 secureCRT SecureCRT是一款支持SSH的终端仿真程序,简单的说是Windows下登录UNIX或Linux服务器主机的软件.不同就是SecureCRT支持SSH,同时支持Telnet和rlogin协议. SecureCRT是一款用于连接运行包括Windows.UNIX和VMS的理想工具. 2 SSH Secure Shell Clien

centos6.5远程连接工具

Linux菜鸟学习笔记,不喜勿喷,仅献给菜鸟的自己,如有错,请大牛们指点我改正. 安装X shell在window系统下远程连接linux,x shell只是一种远程连接工具,类似工具还有CRT.VNC.putty.以下是安装X shell的注意事项此选项中,如不把--初始数字键盘模式(DECNKM)里设置为普通(S),会不能在VI编辑器里边输入数字 在主机里输入centos的IP即可连接 

虚拟机网络设置及Linux远程登录

虚拟机网络配置: 虚拟机设置里打开网络连接: Linux系统远程登录管理工具: 桥接:虚拟机利用本机真实网卡与真实计算机通信:设置跟windows同一网段地址,可以与windows通信,也可以与局域网内同网段也可以访问.需要占用地址. host-only   使用虚拟机虚拟出的网卡VMNet1,只能跟你真实机通信,不能跟局域网通信,不能上外网. NAT:使用虚拟机虚拟出的网卡VMNet8,可以跟真实机通信,虚拟机也可以上外网. 配置命令: 设置Linuxip地址命令:ifconfig etho

Linux远程访问控制

SSH是一种安全通道协议,主要用来实现字符界面的远程登录.远程复制等功能.SSH协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令.OpenSSH是实现SSH协议的开源软件项目,适用于各种Linux操作系统. OpenSSH服务器由openssh.openssh-server等软件包提供,执行"service sshd start"命令即可按默认配置启动sshd服务,包括root在内的大部分用户都可以远程登录系统. sshd服务使用的默认端口为22,必要时建议修改

Linux远程开发

通常,当我们开发Linux程序时有两种方案: 在Linux上直接编写程序并进行运行测试和调试 在Windows或Mac OS X上借助工具进行远程开发 虽然我自己是在Linux环境上直接进行开发的,但也有许多的人是在Windows环境上从事开发工作的,如果离开自己熟悉的系统到陌生的环境上也许会影响到工作效率. 因此今天我们就来看下如何在Windows上使用Visual Studio 2019进行Linux远程开发以及如何避免常见的陷阱. 本文索引 Visual Studio的跨平台开发功能简介