当前位置: 首页 > Linux

Linux服务器SSH连接使用

时间:2023-04-06 11:24:31 Linux

本文已同步到个人博客:辽司的博客----Linux服务器SSH连接使用1.什么是SSH?简单的说,SSH(SecureShell)是计算机之间进行加密登录的网络协议。如果用户从本地计算机使用SSH协议登录到另一台远程计算机,我们可以认为这次登录是安全的,即使中途被拦截,密码也不会泄露。最早的时候,互联网通信都是明文的(比如Telnet、FTP都是明文的),一旦被拦截,内容就暴露无遗了。1995年,芬兰学者TatuYlonen设计了SSH协议,将所有登录信息加密,成为互联网安全的基本解决方案。它迅速在全球推广,现已成为Linux系统的标准配置。SSH只是一个协议,实现有很多,有商业的,也有开源的。本文内容基于OpenSSH,OpenSSH是SSH协议的免费开源实现,应用广泛。Linux一般自带OpenSSH。使用ssh-V查看系统正在使用的SSH客户端和版本信息。默认SSH服务端口号为22。[hadoop@server04~]$ssh-VOpenSSH_6.6.1p1,OpenSSL1.0.1e-fips11Feb2013使用rpm-qa|grepssh检查机器上是否安装了SSH。如果返回结果如下图所示,则包含SSH客户端和SSH服务端,不需要重新安装。如果需要安装,可以通过yum安装(安装过程中会要求输入[y/N],输入y即可):sudoyuminstallopenssh-clientssudoyuminstallopenssh-server如果要使用Windows系统下的SSH,有SecureCRT、Putty、SSHSecureShell、XShell等客户端可供选择。1、中间人攻击SSH之所以能保证安全,是因为它采用了公钥加密。整个过程是这样的:远程主机收到用户的登录请求,将自己的公钥发送给用户。用户使用这个公钥加密登录密码并发回。远程主机使用自己的私钥解密登录密码,如果密码正确,则允许用户登录。这个过程本身是安全的,但是在实现中存在一个风险:如果有人拦截了登录请求,然后冒充远程主机,向用户发送伪造的公钥,用户将难以辨别真伪.因为与https协议不同的是,SSH协议的公钥是不经过证书颁发机构(CA)公证的,也就是自己颁发的。可以想象,如果攻击者介入用户和远程主机之间(比如在公共wifi区域),并使用伪造的公钥获取用户的登录密码。然后用这个密码登录远程主机,那么SSH的安全机制就消失了。这种风险被称为“中间人攻击”。2.启用SSH服务只有启用SSH服务,才能远程登录、连接和管理服务器。如果关闭了SSH服务,远程连接的客户端就不能再连接到服务器,但是连接的客户端可以继续使用。默认情况下,Linux系统会在启动时启动SSH服务(类似于安装mysql后启动时启动的服务)。以CentOS7_64位系统为例,可以通过以下命令启动和停止SSH服务。执行命令systemctlstartsshd.service或servicesshdstatus查看SSH服务是否启动。(centOS5可以使用命令/etc/init.d/sshstatus)active表示SSH服务启动。inactive表示SSH服务关闭。执行命令systemctlstartsshd.service或servicesshdstart启动SSH服务。执行命令systemctlstopsshd.service或servicesshdstop启动SSH服务。执行命令systemctlrestartsshd.service或servicesshdrestart重启SSH服务。执行命令systemctlenablesshd.service或servicesshdenable将服务设置为开机自动启动。二、SSH远程登录ssh远程登录的secureshell协议有两种认证机制:passwordauthenticationpublickeyauthentication1.Passwordauthentication假设你想以用户名user登录远程主机host,你只需要一个简单的命令。$sshuser@host例如:sshhadoop@192.168.0.10如果本地用户名与远程用户名相同,登录时用户名可以省略$sshhostSSH默认端口为22,即也就是说,你的登录请求会发送到远程主机的22端口。可以使用p参数修改端口。$ssh-p2222user@host上面的命令表示ssh直接连接到远程主机的2222端口。如果是第一次登录对方主机,系统会提示如下:  $sshuser@hostTheauthenticationofhost'host(12.18.429.21)'can'tbeestablished.RSAkey指纹是98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d。您确定要继续连接吗(是/否)?这段话意味着你无法确认主机的真实性,只有它的公钥指纹是已知的。是否仍要继续连接?所谓“公钥指纹”是指公钥长度较长(这里使用RSA算法,最多1024位),比较困难,所以对其进行MD5计算,变成128位指纹。在上面的例子中是98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d,比较起来就容易多了。一个自然的问题是,用户如何知道远程主机的公钥指纹应该是什么?答案是没有什么好办法。远程主机必须在其网站上发布公钥指纹,以便用户自行查看。假设经过风险评估后,用户决定接受远程主机的公钥。您确定要继续连接吗(是/否)?是的,会出现提示,说明主机已经通过了。警告:将“host,12.18.429.21”(RSA)永久添加到已知主机列表中。然后,系统会要求您输入密码。密码:(输入密码)如果密码正确,就可以登录了。当远程主机的公钥被接受后,它被存储在文件$HOME/.ssh/known_hosts中。下次连接这台主机时,系统会识别到它的公钥已经保存在本地,跳过警告部分,直接提示输入密码。每个SSH用户都有自己的known_hosts文件,系统也有这样一个文件,通常是/etc/ssh/ssh_known_hosts,里面存放着一些所有用户都信任的远程主机的公钥。2.密钥验证使用密码登录,每次都要输入密码,很麻烦。好在SSH还提供了公钥登录,可以省去输入密码的步骤。关于这种免密登录的原理,在https://www.digitalocean.com/...上有一段解释:要使用SSH密钥进行身份验证,用户必须在其本地计算机上拥有SSH密钥对。在远程服务器上,必须将公钥复制到位于~/.ssh/authorized_keys的用户主目录中的文件中。此文件包含一个公钥列表,每行一个,授权登录此帐户。当客户端连接到主机,希望使用SSH密钥身份验证时,它将通知服务器此意图并将告诉使用哪个公钥的服务器。服务器然后检查其authorized_keys文件中的公钥,生成一个随机字符串并使用公钥对其进行加密。此加密消息只能使用关联的私钥解密。服务器会将这条加密后的消息发送给客户端,以测试他们是否真的拥有关联的私钥。客户端收到这条消息后,将使用私钥对其进行解密,并结合随机数使用先前协商的会话ID显示的om字符串。然后它生成该值的MD5散列并将其传回服务器。服务器已经有了原始消息和会话ID,因此它可以比较由这些值生成的MD5哈希值,并确定客户端必须拥有私钥。大致流程是:当客户端要通过SSHKEY认证登录时,会告诉服务器,并附上自己的公钥KEY信息。服务器检查自己的KEY文件,同时生成一个随机字符串,用公钥加密。加密后的随机字符串只能由客户端用自己的私钥解密。一旦收到消息,客户端将使用自己的私钥对其进行解密以获得随机字符串。同时将之前与服务端约定好的SESSIONID一起做MD5一致的HASH(md5(randomKey,sessionId))返回给服务端。服务器也以相同的方式生成摘要。如果两者一致,则验证通过。假设有两台Linux服务器A和B,如何配置主机之间免密码ssh登录?第一步:在A的$HOME/.ssh/目录下,有两个文件:id_rsa.pub和id_rsa。前者是当前服务器当前用户的公钥,后者是当前服务器当前用户的私钥。如果没有,使用以下命令生成密钥Key对:`ssh-keygen-trsa`或`ssh-keygen`(默认是ras加密算法)。运行以上命令后,系统会出现一系列提示,一路回车即可。然后输入以下命令将公钥传给远程主机host:ssh-copy-id从A登录后就不需要输入密码了。关于ssh-copy-id命令的作用:可以将本地主机的公钥复制到远程主机的authorized_keys文件中,同时会对用户的主目录(home)和~/.ssh设置适当的权限和远程主机的~/.ssh/authorized_keys。语法:ssh-copy-id[-i[identity_file]][user@]machine示例:ssh-copy-idserver02ssh-copy-id-i~/.ssh/id_rsa.pubuser@server3.SCPforcross-machineCopyscp是securecopy的缩写。是Linux下远程拷贝文件的命令。和它类似的命令是cp,但是cp只是在本机复制,不能跨服务器,而且scp传输是加密的。可能会稍微影响速度。当你的服务器硬盘变成只读系统时,scp可以帮你把文件搬出来。另外scp是很耗资源的,不会增加太多系统负载。在这方面,rsync是远远落后的。rsync虽然比scp快,但是当小文件很多的时候,rsync会造成非常高的硬盘I/O,而scp基本不影响系统的正常使用。1.命令格式:scp[参数][原路径][目标路径]2.命令功能:scp是securecopy的缩写,scp是linux系统下基于ssh登录的安全远程文件拷贝命令。linux的scp命令可以在linux服务器之间复制文件和目录。3、使用示例:scp命令实际应用概述:从本地服务器复制到远程服务器:复制文件:命令格式:scplocal_fileremote_username@remote_ip:remote_folderscplocal_fileremote_username@remote_ip:remote_filescplocal_fileremote_ip:remote_folderscplocal_fileremote_ip:remote_file1、2指定用户名,执行命令后需要输入用户密码,第一个只指定远程目录,文件名不变,第二个指定文件名,第三个第四种不指定用户名,命令执行后需要输入用户名和密码。第三个只指定远程目录,文件名不变。第四种指定复制目录的文件名:命令格式:scp-rlocal_folderremote_username@remote_ip:remote_folderscp-rlocal_folderremote_ip:remote_folder一种指定用户名,执行命令后需要输入用户密码;第二种不指定用户名,执行命令后需要输入用户名和密码;注意:remote_folder是远程主机上已经存在的文件夹,如果不存在,则报错。remote_file是本地文件复制到远程主机后的新文件名,可能与原文件名不同。从远程服务器复制到本地服务器:从远程复制到本地的scp命令与上述命令相同,只是在从本地复制到远程的命令之后交换两个参数的顺序。例如:scproot@server01:/home/root/data/abc.txt/home/space/data/123.txtscp-rserver01:/home/root/data//home/space/data/four.SFTPsftp是SecureFileTransferProtocol的缩写,安全文件传输协议。它可以为传输文件提供安全的加密方法。sftp具有与ftp几乎相同的语法和功能。SFTP是SSH的一部分,是一种将文件传输到Blogger服务器的安全方式。事实上,SSH软件包中已经包含了一个名为SFTP(SecureFileTransferProtocol)的安全文件传输子系统。SFTP本身并没有单独的守护进程,它必须使用sshd守护进程(端口号默认为22)来完成相应的连接操作,所以从某种意义上说,SFTP不像是一个服务端程序,更像是一个客户端程序。SFTP也采用加密方式传输认证信息和传输的数据,所以使用SFTP是非常安全的。但由于这种传输方式采用了加密/解密技术,传输效率比普通FTP要低很多。如果你对网络安全有更高的要求,可以使用SFTP代替FTP。1、常用的连接方式有两种,一种是直接使用sftp连接远程服务器IP,另一种是先登录远程服务器,然后打开sftp功能sftp[remotehostIP]连接到[host]通过sftp,端口默认22,用户为当前linux登录用户。sftp-oPort=[port][remotehostIP]通过sftp连接远程服务器,指定端口[port],用户为当前linux登录用户。sftp[user]@[remotehostIP]通过sftp连接远程服务器,端口默认22,指定user[user]。![]()sftp-oPort=[port][user]@[remotehostIP]通过sftp连接到[remotehostIP],port为[port],user为[user]。通过Xshell5与linux建立连接后,可以在图形用户面板上直接打开一个图形化的sftp窗口2.基本操作命令首先可以查询FTP提供的基本命令,然后输入:help命令帮助我们显示FTP提供所有命令pwd:查询linux主机所在目录(即远程主机的目录)lpwd:查询本地目录ls:查询当前linux主机连接目录下有哪些文件lls:查询当前本地上传目录下有哪些文件lcd:change本地上传目录的路径cd:更改远程上传目录get:下载远程目录下的文件到本地目录put:上传本地目录下的文件到远程主机(linux)put:可以按照本地文件的绝对路径,也可以回车后弹出文件选择窗口。quit:断开FTP连接rename:移动或重命名远程服务器文件rm:删除文件rmdir:删除远程服务器上的目录删除目录sftp或scp传输?如果ssh没有配置免登录,scp会经常要输入密码,比较麻烦,所以sftp比较方便。本文参考:http://www.ruanyifeng.com/blo...