我想删除这个字符串:
no-port-forwarding,no-agent-forwarding,no-X11-forwarding,command="echo '请以用户\"centos\"而不是用户\"root\"登录。';echo;sleep 10"
在下面的文件中:
no-port-forwarding,no-agent-forwarding,no-X11-forwarding,command="echo '请以用户\"centos\"而不是用户\"root\"登录。';echo;sleep 10" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCV9sc7lTrpAJb1UARLmNA08XD8Dy0hGJiX1E5qYk8MkH36xbBtcO6xeuncFr619pu+R/08jkYn9GIXlgPzD9THUpEI+m/OSp5nVPgIamiN7LudOSks6zwk 9THkxeSmW95KNEHW5h8Y8MoB0wXzGdr0yiV32nLmvyG18JU6
答案1
该文件是authorized_keys
SSH 文件,通常在~/.ssh/authorized_keys
.它有许多字段,您要删除的字段是第一个可选的“选项”字段。
第二个字段是“keytype”字段,根据手册,该字段的值为ecdsa-sha2-nistp256
、
ecdsa-sha2-nistp384
、ecdsa-sha2-nistp521
、或 之一。ssh-ed25519
ssh-dss
ssh-rsa
sshd
我们可以利用这个事实来删除选项字段:
sed -E 's/^.* (ecdsa-sha2-(nistp384|nistp521)|ssh-(ed25519|dss|rsa))/\1/' ~/.ssh/authorized_keys >~/.ssh/authorized_keys.new &&
mv ~/.ssh/authorized_keys.new ~/.ssh/authorized_keys &&
chmod go-rwx ~/.ssh/authorized_keys
或者,sed -i ...
如果您知道这通常在您的 Unix 上如何工作,您可以使用就地更改文件(该-i
标志工作轻微地)的不同实现中有所不同sed
。
编辑sed
命令s/^.* (ecdsa-sha2-(nistp384|nistp521)|ssh-(ed25519|dss|rsa))/\1/
将匹配扩展正则表达式^.* (ecdsa-sha2-(nistp384|nistp521)|ssh-(ed25519|dss|rsa))
,并将匹配的文本替换为该行中找到的键类型。该表达式匹配从每行输入的开头到(包括)有效键类型之一的任何内容。
答案2
sed -i 's/your_string//g' filename
您可能需要转义 your_string 中的一些标点符号。