Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1698966
  • 博文数量: 1279
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 13084
  • 用 户 组: 普通用户
  • 注册时间: 2018-03-07 16:26
个人简介

Linux学习小标兵,专注Linux资讯分享,技术文章分享

文章分类

全部博文(1279)

文章存档

2023年(236)

2022年(285)

2021年(265)

2020年(248)

2019年(213)

2018年(32)

我的朋友

分类: LINUX

2021-12-09 23:30:51

最近在写自动化测试用例的时候经常会用python语言去实现文件的上传下载功能,这里主要用到的就是SSH协议。为了更好的理解SSH协议,我就翻看了手头的书,回顾SSH的相关知识点,今天就把它总结下,希望对用到SSH协议的小伙伴能够有所帮助。

一、何为SSH协议?

SSH是一种不同于HTTP协议的网络协议,用于服务器之间的加密登录。如果一个用户想从本地使用SSH协议登录另一台远程服务器,需要对方服务器的用户名,密码,地址。这是目前Linux系统进行远程管理的首选方式。最开始的时候,互联网都是明文通信,一旦被截获,信息就被暴露无遗,因此很不安全,很容易被黑攻击而导致网站瘫痪。自从SSH协议问世之后,因其安全性很快成为Linux系统的标配。

二、如何配置sshd服务

我们说“Linux系统中一切皆文件”,那么作为Linux系统远程管理的首选,我们要对哪个文件做怎样的配置呢?sshd服务的配置在系统的/etc/ssh/sshd_config文件中,我们可以打开此文件看看里边都有啥配置。这个配置文件我用的最多的就是开启虚机的root权限,可以用vim文本编辑器打开此配置文件,然后把第48行#PermitRootLogin yes参数前的#去掉,然后保存文件并退出,仅仅是这样文件是没生效的,一定要记得重启sshd服务,也就是在系统中执行service sshd restart命令,这样才算真正把该虚机的root权限打开。这里附上用python语言实现该功能的代码:

def create_ssh_connect_object(ip_remote, port_remote, username, password): ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: print('Connecting to {0}:{1}'.format(ip_remote, port_remote)) ssh.connect(ip_remote, port_remote, username=username, password=password, timeout=TIMEOUT) # timeout protection return ssh except: print('Failed to connect {0}, now will retry'.format(ip_remote)) ssh.connect(ip_remote, port_remote, username=username, password=password, timeout=TIMEOUT) # timeout re-try print('Retry failed, please check the IP, port, account

and password')

def permit_root_login(): """ Enable ssh connection for root """ ssh = create_ssh_connect_object(VXM_IP, 22, VXM_USER, VXM_PASSWORD) print('Connecting to new VxRail Manager with mystic') channelSSHOb = ssh.invoke_shell() remove_offending_key_cmd = 'ssh-keygen -R {0} -f /root/.ssh/known_hosts'.format(NEW_VXM_IP) channel_exe_cmd(channelSSHOb, remove_offending_key_cmd) connect_to_new_vxm_cmd = 'ssh -o "StrictHostKeyChecking no" mystic@{0}'.format(NEW_VXM_IP) if channel_exe_cmd(channelSSHOb, connect_to_new_vxm_cmd).endswith(u"Password: "): print('Entering the password for mystic') mystic_pwd = 'mystic' channel_exe_cmd(channelSSHOb, mystic_pwd) change_to_root_cmd = 'su' if channel_exe_cmd(channelSSHOb, change_to_root_cmd).endswith(u"Password: "): print('Switch user to root') root_pwd = 'Passw0rd!' channel_exe_cmd(channelSSHOb, root_pwd) print('Permit root login for SSH') permit_root_login_cmd = "sed -i 's/PermitRootLogin no/PermitRootLogin yes/g' /etc/ssh/sshd_config" channel_exe_cmd(channelSSHOb, permit_root_login_cmd) restart_sshd_cmd = 'service sshd restart' channel_exe_cmd(channelSSHOb, restart_sshd_cmd) ssh.close()

三、安全密钥验证

SSH作为一种安全的远程登录协议,它是怎么实现安全验证的呢?

SSH提供了两种安全的验证方法:

1. 基于口令的验证,也就是用账户和密码来进行登录验证。如:

mystic@mystic-vm:~$ ssh root@20.10.115.201

Password:

这种方式需要用户提供用户名和密码,很像我们看的抗日战争片中,共产党想要夜袭日本的军备司令部,想要进入大门,经常会要对暗号,这个暗号就像密码,对,则放行,不对,则拦截。

2. 基于密钥的验证,这种方法类似于需要用钥匙开门,一把钥匙开一个门,钥匙不对,则门就打不开,不管你是谁。我只认钥匙。作为一个码农,这个是在我们使用Github的时候使用SSH协议克隆代码经常会用到的,我们想要在某台虚机上克隆github的代码,就先要在该虚机上生成密钥对,然后把密钥对中的公钥上传至github,让该虚机和github相互识别,然后才能成功的把代码克隆到该虚机。

四、远程传输命令

在我们的日常工作中,经常会涉及到文件在不同服务器之间的上传下载,最方便快速的方式是使用scp命令,scp也是基于SSH协议的,scp的语法格式:

把本地文件上传到远程服务器:Scp [参数] 本地文件 远程账户@远程IP 地址:/远程目录

把远程服务器文件下载到本地:Scp [参数] 远程账户@远程IP 地址:/远程目录 本地目录

使用scp命令进行文件的上传下载时,一定要写清楚文件的具体位置,如果是压缩文件,记得加参数-r进行递归操作。只要文件地址正确,远程服务器的账户密码正确,就可以开始文件的传输工作,这种方式比我们用文件传输工具传输文件更高效,省去了登录工具的麻烦,同时传输效率也更快。

以上就是我日常工作中经常用到SSH协议的使用场景,总结的可能不是很全面,毕竟认知有限,有疏漏的地方欢迎大家给予指正,如果说刚好你的工作中也需要用到这些,希望对你有所帮助。如果你还想对SSH协议有更深层次的理解,但苦于找不到好资料,这里推荐给你《Linux就该这么学》这本书,这本书的第9章很全面的介绍了SSH协议,从配置到使用都有很详细的介绍。不管你处于什么水平,都很适合你去查阅。


本文来自《Linux就该这么学》官方资讯站。
阅读(394) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~