我需要运行一个脚本,其中包含一些必须以 root 身份运行的指令和一个 scp:
sbt assembly # requires sudo
scp -r -p myfile [email protected]:/root/spark/root # doesn't require sudo
我用sudo python3 ./myscript.py
.
此外,我将 ssh 配置为myserver
使用 ssh 密钥进行通信:
Host [email protected]
PubKeyAuthentication yes
IdentityFile ~/.ssh/mykey
IdentitiesOnly=yes
PreferredAuthentications=publickey
StrictHostKeyChecking=no
我在 ssh-agent 中注册了我的 ssh 密钥,在我的 shell 启动脚本中~/.zshrc
:
eval `ssh-agent`
ssh-add ~/.ssh/kiliba
请注意,我的公钥已有效注册,myserver
并且我可以通过 ssh 或 scp 访问此服务器,这意味着我的 ssh 配置确实有效,并且我的 ssh 密钥有效。
但是,当使用 sudo 运行此脚本时,scp 一直要求我输入密码,这意味着我的 ssh 配置未使用。在我看来,为了让 scp 与 sudo 一起工作,我做了所有我需要做的事情,但我一定遗漏了一些东西。请注意,奇怪的是,虽然sudo scp
不起作用,sudo ssh
但确实有效。
有趣的细节:在另一台机器上我设法让它工作,但是我一定是在一年前完成的,我不记得我做了什么让它工作。这是一台 Mac,我目前的机器在 Ubuntu 上。
主机名应该只是服务器地址,而不是 uri。
而不是
[email protected]
,我应该写myserver.com
,并在下面添加一条规则来指定用户名: