虚拟机问题(持续更新.......)
程序员文章站
2024-01-08 15:19:04
可以ping通,但是无法ssh连接 service iptables stop service sshd startsudo ufw statussudo ufw disablesudo ufw allow 22 ssh时permission denied, please try again 找到/ ......
可以ping通,但是无法ssh连接
service iptables stop service sshd start
sudo ufw status
sudo ufw disable
sudo ufw allow 22
ssh时permission denied, please try again
找到/etc/ssh/sshd_config 中的permitrootlogin 后的值改为yes 在16中适用,在新版本中并没用 我创了两台虚拟机,其中一台是在较早的时候配置的,里面干了啥都忘记了,因为当时的主机名和用户名都是一样的,然后尝试修改主机名和密码,结果连上了,再创建新的虚拟机时再也没有碰到过这个问题了。。。。
last -a 把从何处登入系统的主机名称或ip地址,显示在最后一行。 -d 指定记录文件。指定记录文件。将ip地址转换成主机名称。 -f <记录文件> 指定记录文件。 -n <显示列数>或-<显示列数> 设置列出名单的显示列数。 -r 不显示登入系统的主机名称或ip地址。 -x 显示系统关机,重新开机,以及执行等级的改变等信息 以下看所有的重启、关机记录 last | grep reboot last | grep shutdown history 列出所有的历史记录: history 只列出最近10条记录: history 10 (注,history和10中间有空格) 使用命令记录号码执行命令,执行历史清单中的第99条命令 !99 (!和99中间没有空格) 重复执行上一个命令 !! 执行最后一次以rpm开头的命令(!? ?代表的是字符串,这个string可以随便输,shell会从最后一条历史命令向前搜索,最先匹配的一条命令将会得到执行。) !rpm 逐屏列出所有的历史记录: history | more 立即清空history当前所有历史命令的记录 history -c cat, tail 和 watch 系统所有的日志都在 /var/log 下面自己看(具体用途可以自己查,附录列出一些常用的日志) cat /var/log/syslog 等 cat /var/log/*.log tail -f 如果日志在更新,如何实时查看 tail -f /var/log/messages 还可以使用 watch -d -n 1 cat /var/log/messages -d表示高亮不同的地方,-n表示多少秒刷新一次。 该指令,不会直接返回命令行,而是实时打印日志文件中新增加的内容, 这一特性,对于查看日志是非常有效的。如果想终止输出,按 ctrl+c 即可。 除此之外还有more, less ,dmesg|more... linux日志文件说明 /var/log/message 系统启动后的信息和错误日志,是red hat linux中最常用的日志之一 /var/log/secure 与安全相关的日志信息 /var/log/maillog 与邮件相关的日志信息 /var/log/cron 与定时任务相关的日志信息 /var/log/spooler 与uucp和news设备相关的日志信息 /var/log/boot.log 守护进程启动和停止相关的日志消息 /var/log/wtmp 该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件
将一个用户设置为在远程连接时只执行一段脚本,退出脚本后直接推出连接
在.bashrc最后一行加要执行的脚本文件的绝对路径 /home/xxx/xxx/xxx/xx.sh logout !!要在用户目录中的.bashrc !!该文件不是readonly文件,如果根目录的bash.bashrc时为readonly文件 !!这两个都可实现此功能.区别是单个用户和所有用户
# 修改readonly文件 :w !sudo tee %
# :q!
linux awk
session_tag=$1 has_process=`ps -ef|grep ssh|grep -v sshpass|grep "$session_tag"|awk '{ print $2 }'` 调用脚本时传入一个参数用$1 在shell脚本中用此进行赋值 $2为第二列数据 在此为程序id
详细的介绍自行百度,我用的不多就没深入看过
strace
在开发堡垒机时用来进行进程的系统调用, 也就是在远程端的所有操作,并输出日志 strace -fp "has_process" -tt -o ./logs/ad/"today"/"session_tag".log 输出文件未处理 图片在下方 has_process, session_tag 在上方有提及 today 为 today=`date "+%y_%m_%d"` shell 中获取格式化时间 参数在下方介绍 strace - trace system calls and signals usage: strace [-dffhiqrttttvvxx] [-a column] [-e expr] ... [-o file] [-p pid] ... [-s strsize] [-u username] [-e var=val] ... [command [arg ...]] or: strace -c [-e expr] ... [-o overhead] [-s sortby] [-e var=val] ... [command [arg ...]] 1。 -c -- count time, calls, and errors for each syscall and report summary 为每个系统调用计算时间、调用、错误,并报告摘要 2。 -f -- follow forks, -ff -- with output into separate files -f 跟踪fork的进程;-ff 把输出定向到独立的文件 3。 -f -- attempt to follow vforks, -h -- print help message -f 尝试跟踪vfork的进程,当今平台与-f功能相同;-h 打印帮助信息 4。 -i -- print instruction pointer at time of syscall 在系统调用时,打印指令指针 5。 -q -- suppress messages about attaching, detaching, etc. 抑制附加、分离等信息 6。 -r -- print relative timestamp, -t -- absolute timestamp, -tt -- with usecs -r 打印相对时间戳;-t 绝对时间戳;-tt 微秒 7。 -t -- print time spent in each syscall, -v -- print version -t 打印每个系统调用的时间花费;-v 打印版本 8。 -v -- verbose mode: print unabbreviated argv, stat, termio[s], etc. args -v 详细模式,打印非简略的参数、状态、termio[s]等 9。 -x -- print non-ascii strings in hex, -xx -- print all strings in hex -x 打印非ascii的字符串为16进制;-xx 打印所有的字符串为16进制 10。-a column -- alignment column for printing syscall results (default 40) 对系统调用结果对齐列(默认为40列) 11。-e expr -- a qualifying expression: option=[!]all or option=[!]val1[,val2]... options: trace, abbrev, verbose, raw, signal, read, or write 在-e后附表达式。一个合格的表达式:选项=[!]所有 或者 选项=[!]值1[,值2]....;可选项:跟踪、缩写、冗长、原始的东东、信号、读、写。 12 -o file -- send trace output to file instead of stderr 发送跟踪输出到文件,而不是stderr 13。-o overhead -- set overhead for tracing syscalls to overhead usecs 设置跟踪系统调用的最大时间 14。-p pid -- trace process with process id pid, may be repeated 跟踪值为id的进程,可以重复多个哦(注:最多32个) 15。-s strsize -- limit length of print strings to strsize chars (default 32) 限制打印字符串的最大长度,默认为32字节 16。-s sortby -- sort syscall counts by: time, calls, name, nothing (default time) 排序,以系统调用过程中的时间、或者调用名等作为排序项。 17。-u username -- run command as username handling setuid and/or setgid 以其他用户名或者组名运行命令 18。-e var=val -- put var=val in the environment for command 设置环境变量 19。-e var -- remove var from the environment for command 清除环境变量 ======================================================== 1。查看cpu运行时间 [guest@localhost tmp]$ strace -c ./b.out % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 42.72 0.000692 87 8 open 38.40 0.000622 622 1 set_thread_area 16.85 0.000273 137 2 munmap 2.04 0.000033 5 7 read 0.00 0.000000 0 8 close 0.00 0.000000 0 1 execve 0.00 0.000000 0 1 access 0.00 0.000000 0 3 brk 0.00 0.000000 0 4 mprotect 0.00 0.000000 0 17 mmap2 0.00 0.000000 0 7 fstat64 ------ ----------- ----------- --------- --------- ---------------- 100.00 0.001620 59 total 2。查看相对运行时间 [guest@localhost tmp]$ strace -r ./b.out 0.000560 mprotect(0xb91000, 8192, prot_read) = 0 0.000196 mprotect(0x45c000, 4096, prot_read) = 0 0.000884 mprotect(0x42a000, 16384, prot_read) = 0 0.000191 mprotect(0xa4a000, 4096, prot_read) = 0 0.000144 munmap(0xb7f12000, 45307) = 0 0.000577 brk(0) = 0x8c2b000 0.000171 brk(0x8c4c000) = 0x8c4c000 0.000183 open("sleeper.cpp", o_rdonly|o_largefile) = 3 0.000225 read(3, "#include <unistd.h>\n#include <io"..., 8191) = 355 0.000372 read(3, "", 8191) = 0 0.000298 close(3) = 0 0.000192 exit_group(0) = ? 3。查看文件变动相关的信号 [guest@localhost tmp]$ strace -e trace=desc ./b.out open("/etc/ld.so.preload", o_rdonly) = 3 fstat64(3, {st_mode=s_ifreg|0444, st_size=17, ...}) = 0 close(3) = 0 open("/lib/libcwait.so", o_rdonly) = 3 read(3, "\177elf\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\20\3\0\0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=s_ifreg|0755, st_size=2572, ...}) = 0 close(3) = 0 open("/etc/ld.so.cache", o_rdonly) = 3 fstat64(3, {st_mode=s_ifreg|0644, st_size=45307, ...}) = 0 close(3) = 0 open("/usr/lib/libstdc++.so.6", o_rdonly) = 3 read(3, "\177elf\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0p\2348\0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=s_ifreg|0755, st_size=936908, ...}) = 0 close(3) = 0 open("/lib/libm.so.6", o_rdonly) = 3 4。strace -o output.txt -t -tt -e trace=all -p 28979 上面的含义是 跟踪28979进程的所有系统调用(-e trace=all),并统计系统调用的花费时间,以及开始时间(并以可视化的时分秒格式显示),最后将记录结果存在output.txt文件里面 5。查看进程是否卡住 strace -p 36699 process 36699 attached - interruptto quit futex(0x22d8400, futex_wait_private, 0, null # 到这里没有任何输出 一直挂起 6。寻找被程序读取的配置文件 stracephp 2>&1 | grepphp.ini open("/usr/bin/php.ini", o_rdonly) = -1 enoent (nosuchfileor directory) open("/etc/php.ini", o_rdonly) = 3 lstat("/etc/php.ini", {st_mode=s_ifreg|0644, st_size=69345, ...}) = 0 7。跟踪指定的系统调用 strace命令的-e选项仅仅被用来展示特定的系统调用(例如,open,write等等) 让我们跟踪一下cat命令的 open 系统调用。 stracecat /tmp/trace.2043925204.012003.xt | head execve("/bin/cat", ["cat", "/tmp/trace.2043925204.012003.xt"], [/* 35 vars */]) = 0 brk(0) = 0x167f000 mmap(null, 4096, prot_read|prot_write, map_private|map_anonymous, -1, 0) = 0x7fb7d8991000 access("/etc/ld.so.preload", r_ok) = -1 enoent (nosuchfileor directory) open("/etc/ld.so.cache", o_rdonly) = 3 fstat(3, {st_mode=s_ifreg|0644, st_size=74047, ...}) = 0 mmap(null, 74047, prot_read, map_private, 3, 0) = 0x7fb7d897e000 close(3) = 0 open("/lib64/libc.so.6", o_rdonly) = 3 read(3, "\177elf\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0p\356\1\0\0\0\0\0"..., 832) = 832 fstat(3, {st_mode=s_ifreg|0755, st_size=1920936, ...}) = 0 mmap(null, 3750152, prot_read|prot_exec, map_private|map_denywrite, 3, 0) = 0x7fb7d83df000 mprotect(0x7fb7d8569000, 2097152, prot_none) = 0 mmap(0x7fb7d8769000, 20480, prot_read|prot_write, map_private|map_fixed|map_denywrite, 3, 0x18a000) = 0x7fb7d8769000 ... 8。 统计概要 它包括系统调用的概要,执行时间,错误等等。使用-c选项能够以一种整洁的方式展示: strace -c ls environments generate githooks hieradata manifests master modules readme.md % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 0.00 0.000000 0 10 read 0.00 0.000000 0 1 write 0.00 0.000000 0 12 open 0.00 0.000000 0 14 close 0.00 0.000000 0 12 fstat 0.00 0.000000 0 28 mmap
在sudo apt 时出现e: 无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-frontend)或其他进程占用
ps -e|grep apt sudokill 相关进程 sudo rm /var/cache/apt/archives/lock sudo rm /var/lib/dpkg/lock sudo apt update
普通用户sudo不要密码
sudo vim /etc/sudoers
版本问题
pkexec visudo 进行编辑
按提示保存 xxx all=(all) nopasswd:all 设置组 %xxx all.....同上
-1:强制使用ssh协议版本1; -2:强制使用ssh协议版本2; -4:强制使用ipv4地址; -6:强制使用ipv6地址; -a:开启认证代理连接转发功能; -a:关闭认证代理连接转发功能; -b:使用本机指定地址作为对应连接的源ip地址; -c:请求压缩所有数据; -f:指定ssh指令的配置文件; -f:后台执行ssh指令; -g:允许远程主机连接主机的转发端口; -i:指定身份文件; -l:指定连接远程服务器登录用户名; -n:不执行远程指令; -o:指定配置选项; -p:指定远程服务器上的端口; -q:静默模式; -x:开启x11转发功能; -x:关闭x11转发功能; -y:开启信任x11转发功能。 -d ssh 会建立一个 socket 监听 ,把数据转发到目标机器上. -l 命令中的l参数一共接受三个值,分别是"本地端口:目标主机:目标主机端口",它们之间用冒号分隔。这条命令的意思,就是指定ssh绑定本地端口2121,然后指定host3将所有的数据,转发到目标主机host2的21端口(假定host2运行ftp,默认端口为21) -p 表示指定登录端口 -n 表示只连接远程主机,不打开远程shell -t 表示不为这个连接分配tty 和上面的 n 参数 一起使用,代表这个ssh连接只用来传数据,不执行远程操作。 -f 表示ssh连接成功后,转入后台运行,如果想关闭,只能通过 kill 命令去杀掉进程.
ssh登录远程服务器时无密码登录,因为要使用sshpass设置免密,需要定制上面提到的审计系统,所以要修改sshpass源码,不能修改系统中原有的sshpass,所以需要下载新的sshpass源码
百度sshpass下载 tar解压 解压参数在linux中有介绍 sudo apt install zlib1g sudo apt install zlib1g-dev sudo apt install libssl ./configure [--prefix=路径] make make install
如果permission denied 去掉prefix
sudo make install
参考:https://askubuntu.com/questions/424786/permission-denied-while-running-make-install
sshpass跳过密码登录并添加日志功能
sshpass -p [密码] [修改后的sshpass源码路径abs path 【/home/jcr/desktop/openssh8/bin/ssh】] 用户名@ip -o stricthostkeychecking=no -z 传入的参数
-z 为源码中添加的参数
使用subprocess模块
smartmontools 相关
参考: