我在设置 SSH 服务时遇到问题:
SSH:错误的配置选项
在被建议停止使用Git部署到VPS后,我又回到了Rsync方法。不幸的是,Rsync 非常不友好,会发出不清楚的错误,有时错误消息与实际错误不匹配。所以,我不指望你会回答什么
rsync: Failed to exec r: No such file or directory (2)
rsync error: error in IPC code (code 14) at pipe.c(85) [sender=3.1.3]
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in IPC code (code 14) at io.c(235) [sender=3.1.3]
方法。
首先我需要检查语法。
我有使用Ubuntu 22.04的 VPS和使用Ubuntu 20.04 的WSL 。遵循基本的安全要求,在 VPS 中我有:
04-StagingBuild
现在我需要将本地目录的内容部署到var/www/staging.example.com
VPS。不幸的是,我还没有找到“统一的正确语法”。这个版本
rsync -azver -i ~/.ssh/Example-Deployer ./04-StagingBuild/ [email protected]:/var/www/staging.example.com
原因
rsync: Failed to exec r: No such file or directory (2)
rsync error: error in IPC code (code 14) at pipe.c(85) [sender=3.1.3]
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in IPC code (code 14) at io.c(235) [sender=3.1.3]
还有一个版本--rsh=ssh
rsync -azver --rsh=ssh -i~/.ssh/Example-Deployer ./04-StagingBuild/ [email protected]:/var/www/staging.example.com
它导致
[email protected]: Permission denied (publickey).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(235) [sender=3.1.3]
由于敏感信息,我无法发布实际的终端输出,但我确信所有目录都存在。此外,正常的 SSH 登录也可以正常工作。
如果您需要我检查某些内容,请告诉我 - 我将提供尽可能多的详细信息。
rsyslog
全新安装ubuntu服务器后是否预计不会安装?如果是,那么日志/var/log/auth.log
实际上去了哪里?
发生的事情是这样的:我正在寻找/var/log/auth.log
文件,但找不到它。我的搜索将我带到了这个帖子,人们说这rsyslog
就是问题所在。
我意识到我在全新的 ubuntu 服务器安装后甚至没有rsyslog
安装(我选择了最小化安装)。
> sudo service rsyslog status
Unit rsyslog.service could not be found.
安装后rsyslog
,该/var/log/auth.log
文件开始存在。
为什么Ubuntu没有安装rsyslog?似乎是一件非常重要的事情。
我有什么误解吗?
谢谢
我最近在 SourceHut 上注册了一个帐户,以拥有一个在线存储库。我按照说明生成了 SSH 密钥对并粘贴了公钥。当尝试 git Push 时,会出现 Ubuntu 提示,说远程站点正在尝试访问我的 ssh 密钥并要求我输入密码,但是在输入密码并单击允许访问后,无论出现多少次,该提示都会一遍又一遍地出现我输入密码。我唯一的出路是单击取消按钮,然后我从 git 收到消息,表示代理阻止了该操作。
我的版本是 22.04,并且已经执行了以下操作但无济于事:
sudo apt install openssh-server
sudo ufw allow ssh
stat --format '%a' <file>
在最后一个文件中,我确认文件已经具有 600 和 644 状态。我还能做些什么吗?或者我可以联系 SourceHut 寻求答案吗?
我创建了一个动态清单,它获取创建的 lxd 容器(这样我就不必每次都输入容器的名称),所以这是动态清单
plugin: community.general.lxd
url: unix:/var/snap/lxd/common/lxd/unix.socket
state: RUNNING
这是库存的输出
ansible-inventory -i lxd.yaml --graph
@all:
|--@ungrouped:
| |--nginx-1
我运行了 ansible -i lxd.yaml -m ping all 并得到了这个输出
nginx-1 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: root@container-ip: Permission denied (publickey).",
"unreachable": true
}
和 ansible.cfg
[defaults]
ansible_user = ansible
ansible_become = yes
ansible_lxd_remote = local
ansible_ssh_private_key_file = /home/zakaria/.ssh/id_rsa
问题是 ansible 使用 root 用户 ssh 进入容器,但我希望它使用 ansible 用户,那么如何强制 ansible 使用 ansible 用户
如何防止ssh
ubuntu 上的连接客户端出现 Broken Pipe 错误?
假设它slurm
正在服务器上运行,并且我刚刚发出了一个salloc
请求。如果连接断开,恢复会话(例如screen
)不会对我的salloc
命令已被 取消这一事实产生任何影响slurm
。我现在必须开始另一个队列。.ssh/config
鉴于编辑文件在降低风险的同时无法提供任何保证,是否有办法防止客户端管道损坏?
为了使用远程存储和生成的一些数据,我首先通过scp servername:/.../big_directory/* ~/
. 文件很多,命令包含一切。这些文件的变化是不可预测的(对我来说),但是只有少数(超过许多)文件在下载和下一个下载之间实际发生变化。有没有办法将它们与我本地已有的进行一一比较,例如if diff file_in_the_server local_file_with_the_same_name returns zero then skip
类似的?在这里,这将节省时间并且具有革命性。我认为这是不可能的,因为为了比较它们,必须以某种方式完成一些下载,但是我无论如何都要确定,因为这对我来说无论如何都是魔法
预先非常感谢
我需要通过 ssh 连接在远程 lubuntu 22.04 系统上执行命令,但不打开 shell。该指令将在脚本内执行。该脚本在我的本地系统(安装了其他 Ubuntu 发行版)上执行。我发现我可以成功地做到这一点,在本地系统上执行以下脚本:
# define a variable which stored the password
MYPASSWORD='mypassword'
sshpass -p $MYPASSWORD ssh myus[email protected] "cp /home/myuser/file1 /path/to/dest/"
在我使用的命令(安装在我的本地系统上)中,以避免输入验证 ssh 会话所需的sshpass
用户密码。myuser
我还必须cp
像前面一样执行命令,但文件的目标是 的子文件夹/etc
,这需要sudo
特权。所以脚本变成:
MYPASSWORD='mypassword'
sshpass -p $MYPASSWORD ssh [email protected] "cp /home/myuser/file1 /path/to/dest/"
sshpass -p $MYPASSWORD ssh [email protected] "sudo -S cp /home/myuser/file1 /etc/sub/folder/"
如果我执行该脚本,该脚本的最后一个命令将输出以下请求:
[sudo] password for myuser:
因此脚本停止执行并等待密码sudo
。
我不想要这个!
如果我执行命令:
> echo mypassword | sudo -S -s cp /home/myuser/file1 /etc/sub/folder/
直接在远程系统的终端上运行并复制,file1
无需/etc/sub/folder/
询问sudo
密码。
但是如果我在本地系统上执行以下命令:
sshpass -p 'mypassword' ssh [email protected] "echo mypassword | sudo -S -s cp /home/myuser/file1 /etc/sub/folder/"
它不起作用!
有没有办法避免通过键盘输入密码sudo
?可以自动发送密码吗?
我需要在远程 Ubuntu 上创建一些别名并在 ssh 连接上启用它们。所以我在 ~/.bashrc 文件(在远程 Ubuntu 上)中定义了别名。
现在当我这样做时
ssh root@<Remote IP>
source ~/.bashrc
我可以使用这些别名...但source ~/.bashrc
我也想自动化,而不是每次都手动执行。所以我尝试了
sshpass -p 'none' ssh -o StrictHostKeyChecking=no root@<Remote IP> -t 'source ~/.bashrc'
...但连接已关闭
如果我做
sshpass -p none ssh -o StrictHostKeyChecking=no root@<Remote IP> -t 'ssh root@<Remote IP>; source ~/.bashrc'
那么它没有断开连接,但无法输入命令 - 输入时终端没有反应
那么如何连接到远程主机并在同一个命令中加载 ~/.bashrc 呢?
我有一台运行 Windows 10(或 Windows 11)的笔记本电脑。我可以ssh
使用 进入我的 Ubuntu 计算机ssh [email protected]
,但我想 (a) 使用 Windows 中的 GUI 应用程序或 (b) 使用 Windows 中的整个桌面。理想情况下,我想通过 X 转发而不是 VNC 或 RDP 来完成此操作。请注意,我在这里没有使用 Wayland。
我怎样才能做到这一点?