所以我对此束手无策,我对 Linux 并不是一个完全的新手,但我知道足够多的知识来绕过等等并更改其他人的脚本。
这是我想做的事情。首先,我想使用公钥/私钥启用无密码 ssh 进入我的 pi2,但无论我做什么似乎都失败了。因此,我创建了一个预期脚本来登录我的 pi2,同时在脚本中指定密码。我知道这完全不安全,但在这种情况下我使用 ssh 只是为了通过 ssh 隧道转发特定端口(运行 apache2 - Owncloud),以便我可以从互联网访问它。原因是我的 Elementary OS(基于 Ubuntu 16.04)永久连接到 VPN,如果没有这个端口,我就无法在工作或离家任何地方使用我的家庭云。没有简单的方法可以使用此 VPN 服务进行拆分隧道,特别是如果您有动态 IP(顺便说一句,我是一名网络工程师,所以这是我的强项)。
现在一切都已经解决了。我运行的预期脚本如下。
#!/usr/bin/expect
>set timeout 20
set ip [lindex $argv 0]
set user [lindex $argv 1]
set password [lindex $argv 2]
spawn ssh -fN -R [remote port]:localhost:[local port] "$user\@$ip"
expect "[email protected]'s password:"
send "$password\r";
interact
然后我在终端中具体说明以下内容。
/usr/local/bin/ssh.exp [ip address] [username] [password]
这一切都很好,我登录后就可以执行该脚本。
我想让它在启动时自动运行,但到目前为止什么都没起作用。使用 @reboot 将其添加到 crontab 失败,将其添加到 rc.local 也失败。我想知道是因为它试图在前台运行它,还是因为它是一个期望脚本,而不是 bash。
大家完全不知所措,如果能给点建议就太好了。顺便说一句,如果我能同时让无密码 ssh 工作就太好了。
答案1
好的,经过一番调整后我终于解决这个问题了。
需要将 pi 上的 .ssh 文件夹和 authorized_keys 文件的权限都设置为 655,并且需要将用户更改为 pi 而不是 root。这成功解决了我的无密码登录问题。
从这一点开始,我可以在 rc.local 中发出标准 ssh 命令,尽管我发现这是以 root 身份执行的。在这种情况下,我需要具体说明以下内容。
ssh -fN -i /home/user/.ssh/id_rsa -R 9000:localhost:5253 [email protected]
果然,它现在在重启时仍然存在,并且 OwnCloud 现在可以通过网络访问。