所以我试图将一个 repo 克隆到我的 Ubuntu 服务器上的目录,但我不断收到 Permission Denied (publickey) 错误。
这很奇怪,因为我的输出ssh -T git@bitbucket.org显示成功:
mo@li515-148:/var/www$ ssh -T git@bitbucket.org
conq: logged in as msamman.
You can use git or hg to connect to Bitbucket. Shell access is disabled.
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试克隆时,出现错误:
mo@li515-148:/var/www$ sudo git clone git@bitbucket.org:username/website-development.git
Cloning into 'website-development'...
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
Run Code Online (Sandbox Code Playgroud)
这是详细的输出:
mo@li515-148:/var/www$ ssh -v git@bitbucket.org
OpenSSH_5.9p1 Debian-5ubuntu1, OpenSSL 1.0.1 14 Mar 2012
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for …Run Code Online (Sandbox Code Playgroud) 我们正在考虑改变的安全流程之一是我们允许用户访问我们服务器的方式。我们有大约 20 个 Web 服务器,其中唯一的访问权限是 SSH,目前我们使用密码身份验证。由于基于密钥的身份验证更加安全,我必须考虑如何最好地管理此过程。
如果我们有 8 个远程用户都使用不同的机器,我们如何控制密钥身份验证,因为这些机器中的每一个都需要服务器的密钥。管理是在客户端级别还是在服务器级别完成?当用户更换他的笔记本电脑或尝试从不同的机器/位置远程访问时会发生什么?
除此之外,我们正在研究:
更改 SSH 端口 我们已经禁用了 root 正在查看使用 PAM 白名单 IP 进行服务器访问的 google-authenticator?用于服务器跳跃的安全 SSH 服务器?
还有什么遗漏吗?
我从 DigitalOcean 部署了一个新的 VPS。它安装了 SSH,但是 /etc/ssh/ssh_config 文件不存在。确实 /etc/ssh/ 是完全空的。
我可以继续创建该文件并输入我想要的指令,或者这是否表明有问题?我应该重新安装SSH吗?
这是我的第一个 Amazon EC2 实例,但我遇到了困难,谷歌无法帮助我。这些是我采取的步骤:
ssh -v -i /Users/James/Documents/sshkeys/aws.pem root@myec2ip
这是我得到的消息:
- OpenSSH_5.9p1、OpenSSL 0.9.8r 2011 年 2 月 8 日
- debug1:读取配置数据 /etc/ssh_config
- debug1:/etc/ssh_config 第 20 行:为 * 应用选项
- debug1:连接到 myec2ip 端口 22。
- debug1:连接建立。
- debug1:身份文件/Users/James/Documents/sshkeys/aws.pem 类型-1
- debug1:身份文件/Users/James/Documents/sshkeys/aws.pem-cert type -1
- debug1:远程协议2.0版,远程软件版本OpenSSH_5.5p1 Debian-6+squeeze3
- debug1:匹配:OpenSSH_5.5p1 Debian-6+squeeze3 pat OpenSSH* debug1:为协议 2.0 启用兼容模式
- debug1:本地版本字符串 SSH-2.0-OpenSSH_5.9
- debug1: SSH2_MSG_KEXINIT 发送
- debug1:收到 SSH2_MSG_KEXINIT
- debug1: kex: …
为了安全起见,我只允许虚拟用户在我的 CentOS 5.8 服务器上通过 SSH 登录,为此我添加了:
AllowUsers dummyaccount
Run Code Online (Sandbox Code Playgroud)
当访问我的服务器时,我然后使用虚拟登录并使用它su -来获得 root 权限,这非常有效。
现在我已经使用以下方法设置了 sftp:
Subsystem sftp /usr/libexec/openssh/sftp-server
Run Code Online (Sandbox Code Playgroud)
当我使用我的 ssh 客户端建立一个 ssh 隧道并使用 FileZilla 连接到它时,我可以很好地使用我的虚拟帐户登录,最终进入它的根目录。
但是,我现在想在 sftp 上使用我的虚拟帐户获得 root 权限,这样我就可以用它完全管理文件系统,或者我想允许 root 登录到 sftp 而不是 ssh,所以换句话说,我d 使用虚拟身份登录 ssh 并用于su -获得如上所述的 root 权限,但是当我创建 ssh 隧道时,我将能够通过 sftp 使用我的 root 登录。
我听说有一种方法可以通过将用户的 shell 更改为 sftp-server 来仅允许用户进行 sftp 访问,但这显然不是 root 的选项,因为据我所知,更改其 shell 会破坏系统。使用该配置创建不同的用户是可行的,但是他们将通过 sftp 对文件系统的访问与虚拟用户一样有限。
你有什么建议?
目前我在远程开发服务器上开发。我通过 SSH 连接到开发服务器(使用 SSH 密钥)作为
ssh -p 22222 user@devbox.com
Run Code Online (Sandbox Code Playgroud)
然后从开发服务器,我通过本地网络连接到数据库
psql -U postgres -h psqldb -d my_database
Run Code Online (Sandbox Code Playgroud)
wherepsqldb指向10.0.0.202开发服务器的/etc/hosts文件。
我想在我自己的电脑上开始本地开发。如何psqldb通过使用远程开发服务器作为 SSH 隧道从本地机器连接到Postgres 服务器(或者有更好的方法来做到这一点)?
编辑
我没有提到我已经在本地服务器上安装了 Postgres 并在默认端口 5432 上监听。
我的本地可以连接到远程,但它无法连接到 dbserver。远程可以连接到 dbserver(使用 psql)。
我想从我的本地对数据库运行 sql 脚本。
我正在寻找一种在远程打开 psql 并使用 ssh 将我的 stdin 和 stdout 定向到我的本地的方法。
现在在愚蠢的选项中,我这样做:
ssh remote
psql -h db report
password
run my commands
Run Code Online (Sandbox Code Playgroud)
我可以通过这种方式在脚本中完成它,但它丑陋且不允许我与 psql 进行交互会话。
PSQL="PGPASSWORD=mypassword psql -h dbserver -d report"
SQL="SELECT 1"
ssh remote "$PSQL --command 'COPY ($SQL) TO STDOUT WITH CSV;'"
Run Code Online (Sandbox Code Playgroud)
Ps-Python 也可以。
我们有一个服务器充当(外部)用户的“保管箱”,可以通过 sftp/ssh 向我们上传数据。我们需要处理这些文件(gpg 解密、解压缩等)。过去,我们只是简单地处理每个用户主目录中的每个文件,而不管我们是否已经处理过它。结果证明这很浪费。我更新(重写)我们的处理脚本以依赖如下机制:
FILESTOPROCESS=$(find -H /home/$CUST -type f -newer /home/$CUST/marker-file)
Run Code Online (Sandbox Code Playgroud)
这与 a 相结合,touch /home/$CUST/marker-file效果很好,我们的工作量大大减少了。
大约一天前,我们的 SSH 服务器出现配置问题,暂时禁止用户向我们上传文件。当脚本再次运行时,它忽略了用户最初未能上传的文件,但随后通过带有“-p”选项的 sftp/ssh 上传,以保留时间戳。这将文件的 c/a/mtimes 设置为比标记文件早一天左右,因此它随后被忽略。
我想禁止用户使用“-p”上传,以便使用当前时间戳创建文件。
我可以在 sshd_config 中执行此操作吗?
您已经有一个正在运行的进程,并且希望将其置于后台运行。
如果您想确保在关闭 ssh 连接后这仍然会运行,您应该怎么做?
注意:在您要做出此决定时,您已经在运行该流程。
我知道这一点Ctrl-Z并且bg会使其在后台运行,但我仍然担心当您关闭 ssh 连接时该进程会被终止。
似乎我在配置的两个帐户的 ssh-agent 行为之间存在一些差异。
我编写了一个简单的监控脚本来检查我们正在运行的某些 VM 的可用性。我使用我的主要访问帐户进行了所有测试和调试。在此过程中,我生成了一个 SSH 密钥对,启动了 ssh-agent,并将身份添加到代理中,以允许脚本在不需要密码的情况下进行 ssh。
现在,我想以服务帐户用户身份运行此脚本。我创建了服务帐户,并生成密钥,将登录 shell 临时设置为 /bin/bash。我生成了我的密钥,删除了密码,并将身份添加到代理中。
差异似乎与外壳如何连接到代理有关。在我的用户帐户中,自从我开始测试(大约两周)以来,我没有重新启动代理。但是,当我尝试在服务帐户下运行脚本时,似乎每次都必须重新启动代理,添加身份,然后执行工作。
理想情况下,我希望代理无限期运行并让服务帐户在脚本运行时自动重新连接到它,这样我就不需要在脚本中管理进程。我查看了每个帐户的配置,没有发现任何差异。任何见解将不胜感激。
**编辑:我忘了指出代理确实持续运行,但服务帐户的 shell 进程似乎没有使用它,必须启动一个新的进程:
ovmmon 14043 0.0 0.0 53916 204 ? Ss May17 0:00 ssh-agent
ovmmon 14952 0.0 0.0 53916 204 ? Ss May17 0:00 ssh-agent
Run Code Online (Sandbox Code Playgroud) ssh ×10
linux ×3
postgresql ×2
sftp ×2
amazon-ec2 ×1
centos5 ×1
debian ×1
git ×1
nohup ×1
psql ×1
public-key ×1
putty ×1
root ×1
scripting ×1
security ×1
shell ×1
ssh-agent ×1
ssh-keys ×1
ssh-tunnel ×1
timestamp ×1
ubuntu-12.04 ×1