天翼云代理,天翼云代理商,北京代理商
天翼云折扣专线:400-150-1900(全国市话)

十分钟学会SSH+SFTP操作终端,告别XShell

2022-02-14 04:10:24

1.前言


在Mac下登陆长途服务器并没有Windows那么便利的运用XShell,相比较而言,在Mac下更多的是依赖终端输入SSH指令登陆长途服务器。


运用SSH指令行的好处便是能够近距离触摸底层,用的越多,用的越溜,对SSH的原理就越了解。相反,运用现成的SSH工具(PuTTY、XShell),咱们其实并不会有触及运用ssh指令的机会,对大多数人而言,怕是只知道最基本的ssh root@ip。


本文将带咱们了解ssh的原理与运用技巧,帮助更多终端爱好者更便利更为所欲为的运用终端。


2.SSH是什么


SSH服务其实是一个守护进程(demon),体系后台会监听客户端的衔接,ssh服务端的进程名为sshd,担任实时监听客户端的恳求(IP 22端口),包括公共秘钥等交换等信息。SSH服务端由2部分组成:openssh(供给ssh服务)、openssl(供给加密的程序)。


3.对称加密和非对称加密


在学习SSH的作业机制之前,咱们需求了解对称加密和非对称加密的原理。


对称加密


所谓对称加密,是采用对称暗码编码技能的加密措施,它的特点是文件加密和解密都是运用相同的密钥。


这种方法在暗码学中叫做对称加密算法,对称加密算法运用起来简略方便,密钥较短,且破译困难,除了数据加密规范(DES),另一个对称密钥加密体系是国际数据加密算法(IDEA),它比DES的加密性好,而且对计算机功用要求也没有那么高。


非对称加密


与对称加密算法不同,非对称加密算法需求两个密钥:公开密钥(publickey)和私有密钥(privatekey)。


公开密钥与私有密钥是一对,假如用公开密钥对数据进行加密,只有用对应的私有密钥才干解密;假如用私有密钥对数据进行加密,那么只有用对应的公开密钥才干解密。


因为加密和解密运用的是两个不同的密钥,所以这种算法叫作非对称加密算法。


4.SSH怎么作业


了解了对称加密和非对称加密是什么之后,再来了解SSH怎么运用非对称加密技能,大致流程如下:


在服务器发动的时分会产生一个密钥(也便是768bit公钥),本地的ssh客户端发送衔接恳求到ssh服务器,服务器检查衔接点客户端发送的数据和IP地址,承认合法后发送密钥(768bits公钥)给客户端,此时客户端将本地私钥(256bit)和服务器的公钥(768bit)结组成密钥对key(1024bit),发回给服务器端,服务端运用自己的私钥解密,读取出客户端的本地私钥,树立衔接经过key-pair数据传输,在此之后,服务端与客户端就愉快的运用客户端私钥进行交流。


5.SSH指令详解


SSH指令最简略的用法只需求指定用户名和主机名参数即可,主机名能够是 IP 地址或许域名。


ssh root@192.168.0.1


指定端口号



SSH 默许衔接到方针主机的 22 端口上,咱们能够运用 -p 选项指定端口号。


ssh -p 22 root@192.168.0.1


追加指令


运用 SSH 在长途主机履行一条指令并显现到本地,然后持续本地作业,只需求直接衔接并在后边加上要履行的指令。


ssh -p 22 root@192.168.0.1 ls -l


图形界面


在长途主机运行一个图形界面的程序,只需运用SSH的-X选项,然后主机就会敞开 X11转发功用。


ssh -X 22 root@192.168.0.1


绑定源地址


假如你的客户端有多于两个以上的 IP 地址,你就不或许分得清楚在运用哪一个 IP 衔接到 SSH 服务器。为了处理这种情况,咱们能够运用 -b 选项来指定一个IP 地址。这个 IP 将会被运用做树立衔接的源地址。


ssh -b 192.168.0.200 root@192.168.0.103


对一切数据恳求紧缩


运用 -C 选项,一切经过 SSH 发送或接纳的数据将会被紧缩,而且仍然是加密的。


ssh -C root@192.168.0.103


打开调试形式


因为某些原因,咱们想要追寻调试咱们树立的 SSH 衔接情况。SSH 供给的 -v 选项参数正是为此而设的。其能够看到在哪个环节出了问题。


ssh -v root@192.168.0.103


6.SSH免密登陆


经过SSH指令登陆长途服务器需求手动的每次输入暗码,处理这个问题其实非常简略,经过 ssh-keygen 生成本地公钥和私钥,将公钥Copy到长途服务器就能够。


1.构建 SSH 密钥对


运用 ssh-keygen -t +算法名,现在大多数都运用 RSA 或许 DSA 算法。


假如你在安装Git时已经做过此步骤,那么疏忽这一步即可。


ssh-keygen -t rsa


2.拷贝本地公钥给长途服务器


ssh-copy-id root@192.168.25.110


你能够经过参数 -i 指定公钥文件


ssh-copy-id -i id_dsa.pub omd@192.168.25.110


3.检查是否已经添加了对应主机的密钥


运用 -F 选项


ssh-keygen -F 192.168.0.1


4.删除主机密钥


运用-R选项,也能够在 ~/.ssh/known_hosts 文件中手动删除


ssh-keygen -R 192.168.0.1


7.怎么装备 SSH


SSH 的装备文件在 /etc/ssh/sshd_config 中,你能够看到端口号,闲暇超时时刻等装备项。


cat /etc/ssh/sshd_config


/etc/ssh/sshd_config 装备文件具体说明


#############1. 关于 SSH Server 的整体设定############## #Port 22 ##port用来设置sshd监听的端口,为了安全起见,主张更改默许的22端口为5位以上生疏端口 #Protocol 2,1 Protocol 2 ##设置协议版本为SSH1或SSH2,SSH1存在漏洞与缺陷,选择SSH2 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress用来设置sshd服务器绑定的IP地址 ##监听的主机适配卡,举个比如来说,假如您有两个 IP, 分别是 192.168.0.11 及 192.168.2.20 ,那么只想要 ###敞开 192.168.0.11 时,就能够设置为:ListenAddress 192.168.0.11 ####表明只监听来自 192.168.0.11 这个 IP 的SSH联机。假如不运用设定的话,则预设一切接口均承受 SSH #############2. 说明主机的 Private Key 放置的档案##########                  #ListenAddress :: ##HostKey用来设置服务器秘钥文件的路径 # HostKey for protocol version 1 #HostKey /etc/ssh/ssh_host_key ##设置SSH version 1 运用的私钥 # HostKeys for protocol version 2 #HostKey /etc/ssh/ssh_host_rsa_key ##设置SSH version 2 运用的 RSA 私钥 #HostKey /etc/ssh/ssh_host_dsa_key ##设置SSH version 2 运用的 DSA 私钥 #Compression yes       ##设置是否能够运用紧缩指令 # Lifetime and size of ephemeral version 1 server key #KeyRegenerationInterval 1h ##KeyRegenerationInterval用来设置多长时刻后体系主动重新生成服务器的秘钥, ###(假如运用密钥)。重新生成秘钥是为了避免运用盗用的密钥解密被截获的信息。 #ServerKeyBits 768 ##ServerKeyBits用来界说服务器密钥的长度 ###指定暂时服务器密钥的长度。仅用于SSH-1。默许值是 768(位)。最小值是 512 。 # Logging # obsoletes QuietMode and FascistLogging #SyslogFacility AUTH SyslogFacility AUTHPRIV ##SyslogFacility用来设定在记载来自sshd的消息的时分,是否给出“facility code” #LogLevel INFO ##LogLevel用来设定sshd日志消息的等级 #################3.安全认证方面的设定################ #############3.1、有关安全登录的设定############### # Authentication: ##限制用户有必要在指定的时限内认证成功,0 表明无限制。默许值是 120 秒。 #LoginGraceTime 2m ##LoginGraceTime用来设定假如用户登录失败,在堵截衔接前服务器需求等待的时刻,单位为妙 #PermitRootLogin yes ##PermitRootLogin用来设置能不能直接以超级用户ssh登录,root长途登录Linux很风险,主张注销或设置为no #StrictModes yes ##StrictModes用来设置ssh在接纳登录恳求之前是否检查用户根目录和rhosts文件的权限和一切权,主张敞开 ###主张运用默许值"yes"来预防或许呈现的低级错误。 #RSAAuthentication yes ##RSAAuthentication用来设置是否敞开RSA密钥验证,只针对SSH1 #PubkeyAuthentication yes ##PubkeyAuthentication用来设置是否敞开公钥验证,假如运用公钥验证的方法登录时,则设置为yes #AuthorizedKeysFile     .ssh/authorized_keys ##AuthorizedKeysFile用来设置公钥验证文件的路径,与PubkeyAuthentication合作运用,默许值是".ssh/authorized_keys"。 ###该指令中能够运用下列根据衔接时的实际情况进行展开的符号: %% 表明'%'、%h 表明用户的主目录、%u 表明该用户的用户名 ####经过扩展之后的值有必要要么是绝对路径,要么是相对于用户主目录的相对路径。 #############3.2、安全验证的设定############### # For this to work you will also need host keys in /etc/ssh/ssh_known_hosts #RhostsRSAAuthentication no ##是否运用强可信主机认证(经过检查长途主机名和关联的用户名进行认证)。仅用于SSH-1。 ###这是经过在RSA认证成功后再检查 ~/.rhosts 或 /etc/hosts.equiv 进行认证的。出于安全考虑,主张运用默许值"no"。 # similar for protocol version 2 #HostbasedAuthentication no ##这个指令与 RhostsRSAAuthentication 类似,可是仅能够用于SSH-2。 # Change to yes if you don't trust ~/.ssh/known_hosts for # RhostsRSAAuthentication and HostbasedAuthentication #IgnoreUserKnownHosts no ##IgnoreUserKnownHosts用来设置ssh在进行RhostsRSAAuthentication安全验证时是否疏忽用户的“/$HOME/.ssh/known_hosts”文件 # Don't read the user's ~/.rhosts and ~/.shosts files #IgnoreRhosts yes ##IgnoreRhosts用来设置验证的时分是否运用“~/.rhosts”和“~/.shosts”文件 # To disable tunneled clear text passwords, change to no here! #PasswordAuthentication yes ##PasswordAuthentication用来设置是否敞开暗码验证机制,假如用暗码登录体系,则设置yes #PermitEmptyPasswords no #PermitEmptyPasswords用来设置是否答应用口令为空的账号登录体系,设置no #PasswordAuthentication yes ##是否答应运用根据暗码的认证。默许为"yes"。 PasswordAuthentication yes # Change to no to disable s/key passwords ##设置禁用s/key暗码 #ChallengeResponseAuthentication yes ##ChallengeResponseAuthentication 是否答应质疑-应对(challenge-response)认证 ChallengeResponseAuthentication no ########3.3、与 Kerberos 有关的参数设定,指定是否答应根据Kerberos的用户认证######## #Kerberos options #KerberosAuthentication no ##是否要求用户为PasswdAuthentication供给的暗码有必要经过Kerberos KDC认证,要运用Kerberos认证, ###服务器有必要供给一个能够校验KDC identity的Kerberos servtab。默许值为no #KerberosOrLocalPasswd yes ##假如Kerberos暗码认证失败,那么该暗码还即将经过其他的的认证机制,如/etc/passwd ###在启用此项后,假如无法经过Kerberos验证,则暗码的正确性将由本地的机制来决议,如/etc/passwd,默许为yes #KerberosTicketCleanup yes ##设置是否在用户退出登录是主动销毁用户的ticket #KerberosGetAFSToken no ##假如运用AFS而且该用户有一个Kerberos 5 TGT,那么敞开该指令后, ###将会在拜访用户的家目录前测验获取一个AFS token,并测验传送 AFS token 给 Server 端,默许为no ####3.4、与 GSSAPI 有关的参数设定,指定是否答应根据GSSAPI的用户认证,仅适用于SSH2#### ##GSSAPI 是一套类似 Kerberos 5 的通用网络安全体系接口。 ###假如你具有一套 GSSAPI库,就能够经过 tcp 衔接直接树立 cvs 衔接,由 GSSAPI 进行安全鉴别。 # GSSAPI options #GSSAPIAuthentication no ##GSSAPIAuthentication 指定是否答应根据GSSAPI的用户认证,默许为no GSSAPIAuthentication yes #GSSAPICleanupCredentials yes ##GSSAPICleanupCredentials 设置是否在用户退出登录是主动销毁用户的凭证缓存 GSSAPICleanupCredentials yes # Set this to 'yes' to enable PAM authentication, account processing, # and session processing. If this is enabled, PAM authentication will # be allowed through the ChallengeResponseAuthentication mechanism. # Depending on your PAM configuration, this may bypass the setting of # PasswordAuthentication, PermitEmptyPasswords, and # "PermitRootLogin without-password". If you just want the PAM account and # session checks to run without PAM authentication, then enable this but set # ChallengeResponseAuthentication=no #UsePAM no ##设置是否经过PAM验证 UsePAM yes # Accept locale-related environment variables ##AcceptEnv 指定客户端发送的哪些环境变量将会被传递到会话环境中。 ###[留意]只有SSH-2协议支撑环境变量的传递。指令的值是空格分隔的变量名列表(其中能够运用'*'和'?'作为通配符)。 ####也能够运用多个 AcceptEnv 达到同样的目的。需求留意的是,有些环境变量或许会被用于绕过制止用户运用的环境变量。 #####因为这个原因,该指令应当小心运用。默许是不传递任何环境变量。 AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT AcceptEnv LC_IDENTIFICATION LC_ALL AllowTcpForwarding yes ##AllowTcpForwarding设置是否答应对应tcp端口转发,维护其他的tcp衔接 #GatewayPorts no ##GatewayPorts 设置是否答应长途客户端运用本地主机的端口转发功用,出于安全考虑,主张制止 #############3.5、X-Window下运用的相关设定############### #X11Forwarding no ##X11Forwarding 用来设置是否答应X11转发 X11Forwarding yes #X11DisplayOffset 10 ##指定X11 转发的第一个可用的显现区(display)数字。默许值是 10 。 ###能够用于避免 sshd 占用了实在的 X11 服务器显现区,从而发生混淆。 X11DisplayOffset 10 #X11UseLocalhost yes #################3.6、登入后的相关设定################# #PrintMotd yes ##PrintMotd用来设置sshd是否在用户登录时显现“/etc/motd”中的信息,能够选在在“/etc/motd”中参加正告的信息 #PrintLastLog yes #PrintLastLog 是否显现前次登录信息 #TCPKeepAlive yes ##TCPKeepAlive 是否持续衔接,设置yes能够避免死衔接 ###一般来说,假如设定这项目的话,那么 SSH Server 会传送 KeepAlive 的消息给 Client 端,以保证两者的联机正常! ####这种消息能够检测到死衔接、衔接不当封闭、客户端溃散等异常。在这个情况下,任何一端死掉后, SSH 能够马上知道,而不会有僵尸程序的发生! #UseLogin no ##UseLogin 设置是否在交互式会话的登录过程中运用。默许值是"no"。 ###假如敞开此指令,那么X11Forwarding 将会被制止,因为login不知道怎么处理 xauth cookies 。 ####需求留意的是,在SSH底下原本就不承受 login 这个程序的登入,假如指UsePrivilegeSeparation ,那么它将在认证完成后被禁用。 UserLogin no        #UsePrivilegeSeparation yes ##UsePrivilegeSeparation 设置运用者的权限 #PermitUserEnvironment no #Compression delayed #ClientAliveInterval 0 #ClientAliveCountMax 3 #ShowPatchLevel no #UseDNS yes ##UseDNS是否运用dns反向解析 #PidFile /var/run/sshd.pid #MaxStartups 10 ##MaxStartups 设置一起答应几个没有登入的联机,当用户连上ssh但并未输入暗码即为所谓的联机, ###在这个联机中,为了维护主机,所以需求设置最大值,预设为10个,罢了经树立联机的不计算入内, ####所以一般5个即可,这个设置能够避免歹意对服务器进行衔接 #MaxAuthTries 6 ##MaxAuthTries 用来设置最大失败测验登陆次数为6,合理设置辞职,能够避免攻击者穷举登录服务器 #PermitTunnel no ############3.7、敞开制止用户设定############ #AllowUsers<用户名1> <用户名2> <用户名3> ... ##指定答应经过长途拜访的用户,多个用户以空格离隔 #AllowGroups<组名1> <组名2> <组名3> ... ##指定答应经过长途拜访的组,多个组以空格离隔。当多个用户需求经过ssh登录体系时,可将一切用户参加一个组中。 #DenyUsers<用户名1> <用户名2> <用户名3> ... ##指定制止经过长途拜访的用户,多个用户以空格离隔 #DenyGroups<组名1> <组名2> <组名3> ... ##指定制止经过长途拜访的组,多个组以空格离隔。 # no default banner path #Banner /some/path # override default of no subsystems Subsystem       sftp    /usr/libexec/openssh/sftp-server ClientAliveInterval 3600 ClientAliveCountMax 0


8.sftp是什么


SFTP是Secure FileTransferProtocol的缩写,安全文件传送协议。


SFTP和FTP是两种协议,它们是不同的,sftp是ssh内含的协议,只需sshd服务器发动了,它就可用,它本身没有独自的守护进程,更不需求ftp服务器发动。


SFTP同样是运用加密传输认证信息和传输的数据,所以,运用SFTP是非常安全的。可是,因为这种传输方法运用了加密/解密技能,所以传输效率比一般的FTP要低得多,假如您对网络安全性要求更高时,能够运用SFTP代替FTP。


9.sftp登陆


运用sftp登陆长途服务器,能够


sftp root@192.168.0.1


也能够指定端口号


sftp -oPort=22 root@192.168.0.1


10.运用sftp进行文件上传下载


下载


语法


get [-afPpRr] remote [local]


下载长途文件到本地目录

get /tmp/test.c ~/


下载长途文件夹到本地目录

get -r /tmp/test.c ~/


上传


语法

put [-afPpRr] local [remote]


上传本地文件到长途文件夹


put ~/test.c /tmp/


上传本地文件夹到长途目录(会上传本地文件夹下的一切文件)

put ~/test /tmp/


11.更多sftp指令


输入 help 指令能够检查sftp支撑的指令操作:

sftp> help Available commands: bye                                Quit sftp cd path                            Change remote directory to 'path' chgrp grp path                     Change group of file 'path' to 'grp' chmod mode path                    Change permissions of file 'path' to 'mode' chown own path                     Change owner of file 'path' to 'own' df [-hi] [path]                    Display statistics for current directory or  filesystem containing 'path' exit                               Quit sftp get [-afPpRr] remote [local]       Download file reget [-fPpRr] remote [local]      Resume download file reput [-fPpRr] [local] remote      Resume upload file help                               Display this help text lcd path                           Change local directory to 'path' lls [ls-options [path]]            Display local directory listing lmkdir path                        Create local directory ln [-s] oldpath newpath            Link remote file (-s for symlink) lpwd                               Print local working directory ls [-1afhlnrSt] [path]             Display remote directory listing lumask umask                       Set local umask to 'umask' mkdir path                         Create remote directory progress                           Toggle display of progress meter put [-afPpRr] local [remote]       Upload file pwd                                Display remote working directory quit                               Quit sftp rename oldpath newpath             Rename remote file rm path                            Delete remote file rmdir path                         Remove remote directory symlink oldpath newpath            Symlink remote file version                            Show SFTP version !command                           Execute 'command' in local shell !                                  Escape to local shell ?                                  Synonym for help


履行本地指令


假如咱们想在进入sftp会话环境下履行本地指令怎么办?只需求在本地指令之前加叹号!即可,示例如下:

!ls


退出会话


无论是在 ssh 还是 sftp,都能够运用exit退出当时会话,sftp 还能够运用quit指令退出。


12.结语


相信本文足以能够让你处理运用终端过程中碰到的绝大多数问题了。


我是薛勤,咱们下期见!关注我,带你领略更多编程技能!

12年经验 · 提供上云保障

服务热线:132-6161-6125(手机) 400-150-1900(全国市话)

站内导航: 天翼云服务器价格| 天翼云购买流程| 天翼云代理| 北京天翼云代理商| 杭州天翼云代理| 深圳天翼云代理商| 钉钉代理商| 阿里云代理| 公司官网

我公司收款账号| 天翼云备案系统

CopyRight © 2019 天翼云代理商. All Rights Reserved 京ICP备11011846号-15 管理-北京志远天辰科技有限公司