ssh-copy-id 之后ssh还是提示输入密码的问题

 Linux & Unix  ssh-copy-id 之后ssh还是提示输入密码的问题已关闭评论
5月 292018
 

问题: 如题。

现场情况:

  1. 我~/.ssh/下有多个秘钥
  2. 配置了 .ssh/config 文件,不同类型的机器使用不同的秘钥,也有一些机器使用默认的秘钥

问题原因:

  1. ssh-copy-id 默认使用的秘钥并不是 id_rsa.pub,而是最新修改过的秘钥:
  2. ssh 命令默认使用的秘钥是 id_rsa.pub
  3. 所以,ssh-copy-id 和 ssh 默认不同的秘钥时,就会出现上述问题
  4. 说明:
    1. ssh-copy-id 时,会提示使用的秘钥是哪个的:
    2. 可以通过 -i 选项来指定ssh-copy-id来使用哪个秘钥:
 Posted by at 上午 10:08

当 git 遇上 ansible

 Linux & Unix  当 git 遇上 ansible已关闭评论
5月 112018
 

在配置了ansible的机器上启用了ControlPath配置: (这样效率会高一些)

 

然而,我还想在这个机器上使用ssh协议的git,这样不用每次都输入密码,然而,我不想使用默认的ssh key,于是在 ~/.ssh/config 中添加如下配置:

问题来了,如果没有Host * 的配置,git是好使的,有了Host * 的配置就不好使了,测试发现,是因为git不喜欢ControlPath, 然而,我google了一大圈,找不到unset掉ControlPath的方法,只好采用如下方式:

 

参考:

https://deepzz.com/post/how-to-setup-ssh-config.html

 Posted by at 下午 4:31

Docker容器中 man 提示 ‘No manual entry for man’

 docker, Linux & Unix  Docker容器中 man 提示 ‘No manual entry for man’已关闭评论
5月 112018
 

现象:

自从使用了docker容器,在容器中yum安装的软件就怎么着也man不了,man的时候就提示:

通过rpm查看软件包中是否包含man文件,确实包含; 使用rpm -V 也检查不到rpm包损坏; 实际上,man文件是不存在的。

原因:

  1. 我们使用的docker镜像已经被官方精简过了,把所有已安装软件的man页都删除了,这样镜像可以更小
  2. docker镜像中的/etc/yum.conf 也被刻意处理了一下,里面有个tsflags的选项,配置了nodocs,这样的话,新安装的软件也会被自动剔掉man文件(估计rpm知道man文件是被故意删掉的,所以也不报错)

解决办法:

  • /etc/yum.conf 中注释掉:
  • 卸载掉相关软件,重新yum安装

 

注: 上述情况是把docker容器当虚拟机使用的,并不太在乎镜像的大小

 

 Posted by at 下午 3:23

vsftp in docker

 docker, Linux & Unix  vsftp in docker已关闭评论
3月 052018
 

当vsftpd在容器里面,而且容器IP又是host内部的私有IP的情况,client采用passive模式来下载数据能行得通吗? 可以的

  1. passive模式下,vsftpd需要listen临时端口来传输数据,所以docker创建容器时,不仅要暴露21端口,还要暴露可能listen的临时端口,为了不映射太多端口,可以在vsftpd的配置文件中配置可能的临时端口的范围
  2. passive模式下,vsftpd需要通过协议内容告知client临时端口及IP地址,然而,容器网卡IP地址显然是不能被client直接访问到的,庆幸的是,vsftpd配置文件中有关于可以告知client的ip地址的配置,该ip地址并不要求本机上必须有的,显然该配置是给类似情况准备的

 Posted by at 下午 6:13

bash 之echo vs printf

 Linux & Unix  bash 之echo vs printf已关闭评论
1月 162018
 

没有发现如何仅仅通过echo 直接输出 ‘-e’ 的方法, printf则可以 — 使得不再继续解析更多选项。

 

If you want to literally print the string “-e”, you will have difficulties doing it with echo. I faced such a problem recently while writing a script.

I had to use prinf to be able to print the literal string “-e”.

 Posted by at 下午 3:43

bash 之 echo -e

 Linux & Unix  bash 之 echo -e已关闭评论
1月 162018
 

示例:

如果我仅仅想输出 ‘-e’ 呢?如何echo 呢?

这个是不会有任何输出的,当然,你可能马上就发现问题了; 不过,有些情况下,你想echo的东西是预先不知道的,实在程序运行时生成的,万一生成了 ‘-e’ ,你将看不到 ‘-e’ ,而且还影响了程序的行为,如何避免呢?

 

 Posted by at 下午 3:12

文件系统 之 inode篇

 ceph, Linux & Unix  文件系统 之 inode篇已关闭评论
1月 052018
 

缘起:

20T的1亿个小文件存放在xfs的文件系统中会存在inode被用光(但是存储空间还有很大空闲)的问题吗?

 

测试:

df -i 可以看到可用、已用inode数量,一般来讲,mkfs的时候,会划分 x% 的空间存放inode的,可用inode数量是按照文件个数计算的,不是按照占用空间计算的,如:

500GB的磁盘,格式化为xfs后,可以使用的inode数量约 2.6亿; 那么1GB的磁盘格式化为xfs后,可用inode数量为 2.6亿/500 ~= 50万吗?测试如下:

确实,1GB默认可以存放约52万个文件,注意: 目录也是占用inode的,而且也不可能把所有文件都放在一个目录的,所以真正计算inode的话,还需要把目录的数量算上; 按照每个目录100个文件计算的话,50万个文件就需要5k个目录(可以忽略不计了);其实不全对,5k个目录放在一个父目录下也不科学,为了保证每个目录最多100个的话,还要分到50个父目录里面,额.. 也没有多少目录

 

按照上面的公式计算: 20T/1G*50w ~= 1000亿 个文件, 不少了

当然,如果还不够的话,格式化的时候可以指定更大的inode数量

 

计算:

10亿个文件,打散到N个目录中,每个目录的子目录(文件)数量不超过100个,需要多少级子目录?

100x  > 10亿 ,x最少值为 x>=5 ,就是说 5层目录就够了

 


其实,xfs是个比较只能的文件系统,没有固定大小的inode区域,随着磁盘的使用,inode的总数量也在变化,基本不会出现inode已用光,但是存储空间很空闲很多的情况

 Posted by at 下午 4:42

KVM 通过virsh console连入虚拟机

 Linux & Unix, virsh  KVM 通过virsh console连入虚拟机已关闭评论
12月 202017
 

参考: https://www.cnblogs.com/xieshengsen/p/6215168.html

在kernel启动参数中添加: console=ttyS0

这岂不是要重启?

也不用,centos7下,只需要启动一个服务就行:

为了下次能自动启动,可以enable一下:

注意: 最好确保 ttyS0已经加入了 /etc/securetty :

然后就可以virsh console $domain 了

其实对应domain的console在宿主机是有一个tty的,如下方式查看:

如:

比较有趣的玩法是:

  1. 在终端1 去 cat /dev/pts/2
  2. 在终端2 去 echo -e “$username\n$password\necho hello world” >/dev/pts/2
  3. 在终端1就能看到输出
  4. 最后别忘了echo “exit” >/dev/pts/2 否则,下次不需要密码就进去了

为什么virsh console没有配置的时候,virt-manager依然能看到虚拟机的界面呢?virt-manager走的是vnc(或spice)方式,而且是宿主机里面提供的,和虚拟机里面是否有vnc(spice)没有关系。

 

通过ps也能查看:

默认情况下,虚拟机的vnc(或spice)会listen 127.0.0.1 上的端口,远程通过virt-manager访问的时候,如果使用ssh协议的话,会通过如下方式将vnc(或spice)端口重定向到本地:

然后在这个打开的流上进行vnc(或spice)协议,这个可就不想tty那么好模拟了

 

那么,kvm如何就能启动一个vnc,使得能够访问虚拟机呢?模拟硬件的tty?

 

参考: https://www.cnblogs.com/xieshengsen/p/6215168.html

 Posted by at 下午 6:22

linux 虚拟网络设备之vlan

 Linux & Unix  linux 虚拟网络设备之vlan已关闭评论
12月 122017
 

我们通过一个网桥两个设备对,来连接两个网络名字空间,每个名字空间中创建两个vlan

借助vconfig来配置vlan:

 

查看一下vlan配置:

 

现在,我们可以分别在两个名字空间来ping另外一个名字空间的两个IP,虽然两个IP都能ping通,但是使用的源IP是不同的,走的vlan也是不同的,我们可以在veth01/veth10/veth02/veth20/br-test-vlan 任意一个上抓包,会看到vlan信息:

 

如果试图从veth10.3001 去ping 172.16.30.22 是不能通的,因为是不同的vlan呀:

 

不适用vconfig的解法:

另: vlan 一般以  设备名.vlanid 来命名,不过并非强制,如下命名为 vlan3003也是没问题的

注意:一个主设备上相同vlan好的子设备最多只能有一个

 

所以,正常来讲,一般是这样的:

 

参考: http://network.51cto.com/art/201504/473419.htm

 Posted by at 下午 3:42

当while read 遇上ssh

 Linux & Unix  当while read 遇上ssh已关闭评论
12月 052017
 

为什么第二条命令输出的不是a b c三行?

改进:

这里把ssh的标准输入关闭了,结果就正常了,可见,原来不能输出三行是有ssh的标准输入导致的

再次验证如下:

这里比较清晰地说明了b、c被ssh给读走了

如果不想费这心思,完全可以别走管道:

 

有时候就是这样,能用简单明了的写法,最好别摆酷

 

非图片版:

 

 Posted by at 下午 3:42