操作系统

linux/scp命令报“bash: scp: command not found lost connection”错误的解决办法

这两天接到的任务是给JAVA开发项目组部署【JAVA+MySQL主从+Redis主从】运行环境。部署过程中大问题倒没有,小问题却不少,因此也涨了不少经验值。后续有时间我会一一整理记录下来,沉淀而不忘分享。 今天,装完一台redis,并配置好redis.conf后,想偷懒直接用scp传到另一台redis,省去全部重新编辑的麻烦。结果一执行就出现下面这个错误: 所有机器我都是最小化安装,所以很多组件没装也是情理之中,所以用yum装一下scp: 装完后,继续执行之前的命令,结果出现如下错误: 我擦,这就诡异了!明明装了为毛提示不存在呢? 而且还提示输入密码了,用whereis也能找到scp,没办法从man中找到一个DEBUG参数 -v,于是如下增加 -v 参数执行试试: 原来是因为目标主机也没装scp,倒是我大意了!登陆后再次执行如下命令安装scp: 回到之前的服务器上,执行最初的命令,果然毫无意外成功了: 网站搜索这个故障,大部分经验都是告知要安装scp,然后给出一个 yum 在线安装 scp 的命令。实际上,明明已经提示要输入密码了,说明 scp 是正常安装的!还继续报找不到命令,我们就只能从 scp 的执行过程来分析了,因此就借助到了scp的debug参数(-v),很清楚的看到了整个执行过程,从而得知真正的原因是对方主机没有安装scp,而且还可以清楚的看到 scp 的工作流程。 中午时间有限,就写这么多了,希望遇到这个问题的人,看到此文能少走点弯路。
阅读全文
操作系统

解决mstsc无法连接问题:由于没有远程桌面授权服务器可以提供许可证…

最近一直很忙很忙,完全没时间打理博客,回家后基本上就是洗洗睡的节奏,我之前真的从未想过,我会有回到家不想碰电脑的情况。。。不但不想碰电脑,而且失眠症也消失无遗,因为实在是太疲劳了,总算是有了些好处。 这几天实际上也有一些可以记录的工作经验,无奈一直没有头绪也没时间,刚好趁着今天午休间隔,先整理出一小部分好了,不然博客就真废了。。。 一、故障案例① 今天上午在给测试组的IIS新增https的时候,发现远程弹出如下错误: 由于没有远程桌面授权服务器可以提供许可证,远程会话被中断.请跟服务器管理员联系。 度了度,原来也是很常见的一种错误,解释如下: Windows Server 2008 R2 由于没有远程桌面授权服务器可以提供许可证,远程会话被中断。 备忘一下解决方法: ①、可以使用如下命令远程登陆: ②、要彻底解决这个问题,则需要删除远程桌面服务,图解如下: Ps:不过我打开管理员貌似没有发现远程桌面服务。。。 然后新增SSL的时候又遇到了小问题,给我提供只有Nginx下的证书(Key 和 pem),而网站是IIS服务器,那要装Nginx做方向代理也太麻烦了。 本打算去申请一个沃通的免费SSL证书的,结果发现我并没有拿到域名的控制权,只好歇菜。不过最后,我还是把这任务完成了,具体下篇文章继续分享。 以下内容补充于2015年03月28日: 二、故障案例② 解决了案例①出现的问题后,偶然又发现了新的远程桌面连接故障,如图:   错误提示内容为:发生身份验证错误。无法连接到本地安全机构... 网上看了一些类似的案例,解决方法大部分是修改被远程机器的一些设置,而我按照步骤设置了之后依然不行。最后在51CTO论坛发现了一个同样的错误提示的解决案例,照样设置之后果真可以了! 所以,在这里记录下,以方便更多遇到同样问题的人。 解决方法: 网络连接配置-->双击打开TCP/IPV4配置-->选择"高级",在WINS选项卡的下面找到NetBIOS设置,选择“禁用 TCP/IP 上的 NetBIOS”,然后确定就可以了。 简单图解: 如上设置之后,一般就能正常远程登录了,遇到同样问题了吗?赶紧试试吧!
阅读全文
操作系统

CVE-2015-0235:Linux glibc高危漏洞的检测及修复方法

这几天复习运维知识,也没怎么关注业界新闻,可等我一关注,又“捅娄子”了,Linux继上次CVE-2014-6271漏洞爆发以来,再次爆发一个严重漏洞:CVE-2015-0235-Linux glibc高危漏洞,正在使用Linux系统的个人或企业,看到消息请立即修复! 下面是我转载的检测和修复方法,我个人服务器Centos 6.5已成功修复: 一、漏洞概述 2015/01/28【CVE 2015-0235: GNU glibc gethostbyname 缓冲区溢出漏洞 】全面爆发,该漏洞的产生是Qualys公司在进行内部代码审核时,发现了一个在GNU C库(glibc)中存在的__nss_hostname_digits_dots函数导致的缓冲区溢出漏洞。这个bug可以通过gethostbyname *()函数来触发,本地和远程均可行。该漏洞(幽灵漏洞)造成了远程代码执行,攻击者可以利用此漏洞远程获取系统进程当前的权限。 幽灵漏洞是Linux glibc库上出现的一个严重的安全问题,他可以让攻击者在不了解系统的任何情况下远程获取操作系统的控制权限。目前他的CVE编号为CVE-2015-0235。 什么是glibc glibc是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。glibc 囊括了几乎所有的 UNIX 通行的标准。 出现了什么漏洞 代码审计公司Qualys的研究人员在glibc库中的__nss_hostname_digits_dots()函数中发现了一个缓冲区溢出的漏洞,这个bug可以经过 gethostbyname*()函数被本地或者远程的触发。应用程序主要使用gethostbyname*()函数发起DNS请求,这个函数会将主机名称转换为ip地址。 更多的细节可以从下面的视频中看到(一堆鸟语,听不懂): XODgxMTg1NDY4 漏洞危害 这个漏洞造成了远程代码执行,攻击者可以利用此漏洞获取系统的完全控制权。 漏洞证明 在我们的测试中,我们编写了一个POC,当我们发送一封精心构造的电子邮件给服务器后,我们便可以获得远程Linux服务器的shell,这绕过了目前在32位和64位系统的所有保护(如ASLR,PIE和NX)。 我们能做什么? 给操作系统及时打补丁,我们(Qualys)已与Linux发行商紧密合作,会及时发布补丁。 为什么叫做GHOST? 因为他通过GetHOST函数触发。 哪些版本和操作系统受影响? 第一个受影响的版本是GNU C库的glibc-2.2,2000年11月10号发布。我们已找出多种可以减轻漏洞的方式。我们发现他在2013年5月21号(在glibc-2.17和glibc-2.18发布之间)已经修复。不幸的是他们不认为这是个安全漏洞。从而导致许多稳定版本和长期版本暴露在外,其中包括Debian 7 (wheezy),Red Hat Enterprise,Linux 6 & 7,CentOS 6 & 7,Ubuntu 12.04等。 以上内容摘自:360安全播报平台 二、检测方法 检测方法1【RedHat官方检测方法】: ghost_check.sh源码(张戈亲测:推荐使用这种方法来测试更加准确!): 检测方法2【简单的检测方法】: 检测方法3【二进制检测方法】: ghost.c源码: 三、修复方法 ①、在线修复方案 CentOS, Red Hat, Fedora等系列衍生版本(RHN建议): Debian, Ubuntu等系列衍生版本: ②、离线修复方案 I. Centos6.5离线补丁 先检查本地glibc包安装了哪些相关包 然后,到阿里源下载对应版本 进行后台断点下载补丁包 使用yum本地安装 或是rpm安装 II. Red Had系列衍生版本 使用方法:参考上文【Centos6.5离线补丁】的修补方法。 离线包下载地址: http://mirrors.aliyun.com/centos/7/updates/x86_64/Packages/glibc-2.17-55.el7_0.5.i686.rpm http://mirrors.aliyun.com/centos/7/updates/x86_64/Packages/glibc-2.17-55.el7_0.5.x86_64.rpm 四、修复检测 ①、ghost_check.sh脚本检测 ②、ghost.c脚本检测 注意:打好补丁后必须立即重启操作系统,否则会造成应用业务无法使用。 五、参考来源 redhat官方:https://access.redhat.com/articles/1332213 redhat官方补丁介绍: https://rhn.redhat.com/errata/RHSA-2015-0090.html https://rhn.redhat.com/errata/RHSA-2015-0092.html ubuntu官方补丁介绍: http://www.ubuntu.com/usn/usn-2485-1/
阅读全文
操作系统

Linux系统监控、诊断工具之top命令详解

暂时没有写作灵感,就整理一些Linux基础知识好了,方便自己查阅,同时也是温故而知新嘛~! 在张戈博客,同样很有用的知识性博文还有以下几篇,也许你也会比较感兴趣: 详解Linux系统的CPU负载均值 教你如何查看Linux的CPU负载 Linux服务器的进程查看命令详解 Llinux文件目录权限及chmod命令简析 Linux系统内存监控、性能诊断工具vmstat命令详解 Ps:更多相关博文,请访问系统运维 或 站内搜索,当然有其他Linux相关知识的需求也欢迎留言。 接触 linux 的人对于 top 命令可能不会陌生(不同系统名字可能不一样,如 IBM 的 aix 中叫 topas ),它的作用主要用来监控系统实时负载率、进程的资源占用率及其它各项系统状态属性是否正常。 下面我们先来看张 top 命令的截图: (1)系统、任务统计信息: 前 8 行是系统整体的统计信息。第 1 行是任务队列信息,同 uptime 命令的执行结果。其内容如下: 01:06:48 当前时间 up 1:22 系统运行时间,格式为时:分 1 user 当前登录用户数 load average: 0.06, 0.60,0.48 系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。注意:这三个值可以用来判定系统是否负载过高——如果值持续大于系统 cpu 个数,就需要优化你的程序或者架构了。 (2)进程、 cpu 统计信息: 第 2~6 行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下: Tasks: 29 total 进程总数 1 running 正在运行的进程数 28 sleeping 睡眠的进程数 0 stopped 停止的进程数 0 zombie 僵尸进程数 Cpu(s): 0.3% us 用户空间占用CPU百分比 1.0% sy 内核空间占用CPU百分比 0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比 98.7% id 空闲CPU百分比 0.0% wa 等待输入输出的CPU时间百分比 0.0% hi Hardware IRQ 即“中断请求”的意思。 0.0% si Software IRQ (3)最后两行为内存信息: Mem: 191272k total 物理内存总量 173656k...
阅读全文
操作系统

Linux系统内存监控、性能诊断工具vmstat命令详解

最近,烦心事有点多,博客也像是进入了便秘期。虽然还远远不到说放弃的地步,但总有一种挤不出牙膏的郁闷感。很怀念前几个月的冲劲和激情,一天都能存好几篇优质草稿。 看来,张戈博客是首次进入瓶颈阶段了!没办法了,先转点基础教程充门面,当然也是为了温故而知新。 vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。 一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,如: 2表示每个两秒采集一次服务器状态,1表示只采集一次。 实际上,在应用过程中,我们会在一段时间内一直监控,不想监控直接结束vmstat就行了,例如: 这表示vmstat每2秒采集数据,一直采集,直到我结束程序,这里采集了5次数据我就结束了程序。 好了,命令介绍完毕,现在开始实战讲解每个参数的意思。 ①、Linux 内存监控vmstat命令输出分成六个部分: ②、其中每个参数的意思如下: r 表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。 b 表示阻塞的进程,这个不多说,进程阻塞,大家懂的。 swpd 虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。 free   空闲的物理内存的大小,我的机器内存总共8G,剩余3415M。 buff   Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用300多M cache cache直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用300多M(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。) si  每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。 so  每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。 bi  块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,我本机上没什么IO操作,所以一直是0,但是我曾在处理拷贝大量数据(2-3T)的机器上看过可以达到140000/s,磁盘写入速度差不多140M每秒 bo 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。 in 每秒CPU的中断次数,包括时间中断 cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。 us 用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。 sy 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。 id  空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。 wt 等待IO CPU时间。
阅读全文
操作系统

[svn: E155004]svn update报database is locked错误的解决办法

今天突然发现项目更新脚本在拉代码的时候抛出了一个如下错误: 根据错误提示,我先执行了一下svn cleanup,结果依然抛出错误(忘记记录错误信息) 那没办法,求谷歌,求百度了。 前人总结的方法大致如下: 结果居然找不到 .backup这个命令?!使用 .help看了下: 这尼玛,哪有.backup啊?试了下网上分享的修复方法: 有的时候sqlite3数据库会损坏,使用的时候提示:sqlite3 disk image malformat,这个时候,如何恢复数据呢? 解决方法: 首先去下载sqlite3的命令行工具 http://www.sqlite.org/download.html 再执行命令行命令,将你的数据库中的数据导出为sql语句文件 最后导入到一个新库中 结果,修复报错: Error: malformed database schema (nodes_update_checksum_trigger) - near "OLD": syntax error 难道是这个数据库文件损坏了?那就有点麻烦了。 突然,想到这SUSE Linux下安装的sqlite3 没有 .backup命令,那我到Centos下试试,也许版本不一样呢! 最后,将wc.db弄到了centos系统,发现有.backup命令了!于是,重新导出一份数据。然后再移回之前的SUSE系统。继续svn up发现还是报错!我擦,这尼玛还真顽固啊! 试着执行了一下svn cleanup,发现居然没报错了!再试 svn up也正常了!原来 .backup还真是可以! 写这篇文章的目的就是分享一个经验,偶尔出现疑难杂症,一定不要钻进死胡同出不来!真的非常有可能是系统(软件)的问题!换个系统(软件)试试可能就柳暗花明了! 所以,本文标题提到的报错的解决办法,依然还是前人总结的 sqlite3+ .backup重新导出wc.db,当你发现没有 .backup命令时,很可能就是sqlite3的版本不对!这时候,你就可以升级sqlite3或者换一个服务器再试! 本文提到的sqlite3的版本如下,供参考: ①、有 .backup命令的sqlite3版本: ②、没有 .backup命令的sqlite3版本: 哦了,这个问题就写到这了!遇到问题切记不要钻死胡同,往往转个弯就能豁然开朗。
阅读全文