将私钥粘贴到 Jenkins 门户网站安全吗?
Is pasting a private key into the Jenkins web portal secure?
在 Jenkins 中,我只见过一种存储私有 ssh 密钥凭据的方法。
大家推荐这个方法:在网络浏览器中打开Jenkins服务器门户网站,进入Credentials
,在Add Credentials
、select SSH Username with private key
下,将私钥粘贴到网页中,然后点击 ok
。
我假设,这使用 HTML 形式通过 HTTPS 将 POST 请求中的私钥发送到 Jenkins 服务器,然后 Jenkins 服务器将私钥本地保存在服务器的磁盘上。
问题:问题“How to securely send private keys?”得票最高的答案表明 ssh 私钥只能通过 不传输来保护完全没有.
我的问题:将私钥粘贴到 Jenkins 门户网站并通过 HTTPS 传输它们真的安全吗?如果没有,将私钥放入 Jenkins 凭据的最佳方法是什么?
保护私钥的第二种方法是只使用一个特定用途:然后您可以随时轻松撤销该密钥,重新生成一个专用于该访问的密钥,并注册新密钥。
也就是说,copy/pastingJenkins Web GUI 的密钥在您的客户端和 Jenkins 服务器之间进行加密传输被认为足够安全,尤其是在企业 LAN(局域网)环境中,以你自己的 Jenkins 服务器。
如果您是通过互联网在 WAN 上通话,那么……这不是完全 防弹保险箱。但对于某些 Jenkins 作业(除非这些作业泄露敏感数据),它应该足够好。
原位
为此使用网络 UI 对于几乎所有用例来说可能是安全的足够,并且在便利性方面很难被超越。
尽管如此,在需要的地方生成私钥当然是个好建议,而且使用 Jenkins 绝对是可能的。一种方法:
- 通过 SSH 连接到 Jenkins 服务器,并生成密钥
- 运行 一些 groovy 在脚本控制台中创建 Jenkins 凭据
- 泄露 public 密钥
- 删除服务器上生成的密钥
在这个例子中,在Jenkins服务器上$HOME
和$JENKINS_HOME
都指向/var/jenkins_home
,密钥在~/temp
中生成。
在 Jenkins 服务器上生成密钥
ssh jenkins@my.jenkins.server
mkdir ~/temp
cd ~/temp
ssh-keygen -t rsa -b 4096 -C "some-meaningful-label" -f "./my-in-situ-key"
这会在 /var/jenkins_home/temp
中创建 my-in-situ-key
和 my-in-situ-key.pub
。
创建 Jenkins 凭证
在 Jenkins 脚本控制台中:
import com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey
import com.cloudbees.plugins.credentials.CredentialsScope
import com.cloudbees.plugins.credentials.domains.Domain
def domain = Domain.global()
def store = Jenkins.instance.getExtensionList('com.cloudbees.plugins.credentials.SystemCredentialsProvider')[0].getStore()
def privateKeyString = new File('/var/jenkins_home/temp/my-in-situ-key').text
def keySource = new BasicSSHUserPrivateKey.DirectEntryPrivateKeySource(privateKeyString)
def privateKeyCredential = new BasicSSHUserPrivateKey(
CredentialsScope.GLOBAL,
"temp-stack-overflow-key", // id
"jenkins", // username
keySource, // private key
"", // passphrase
"Temporary Demo Key" // description
)
store.addCredentials(domain, privateKeyCredential)
"Credential Added"
清理前测试凭据。
清理
拿到public钥匙,出门时一定要删除私钥。
cat ~/temp/my-in-situ-key.pub
rm -rf ~/temp
简短的回答是"No"。如果您想在 Jenkins 服务器中使用 SSH 身份,请在那里生成一个不同的 public/private 密钥并将其专门用于该目的。
在 Jenkins 中,我只见过一种存储私有 ssh 密钥凭据的方法。
大家推荐这个方法:在网络浏览器中打开Jenkins服务器门户网站,进入Credentials
,在Add Credentials
、select SSH Username with private key
下,将私钥粘贴到网页中,然后点击 ok
。
我假设,这使用 HTML 形式通过 HTTPS 将 POST 请求中的私钥发送到 Jenkins 服务器,然后 Jenkins 服务器将私钥本地保存在服务器的磁盘上。
问题:问题“How to securely send private keys?”得票最高的答案表明 ssh 私钥只能通过 不传输来保护完全没有.
我的问题:将私钥粘贴到 Jenkins 门户网站并通过 HTTPS 传输它们真的安全吗?如果没有,将私钥放入 Jenkins 凭据的最佳方法是什么?
保护私钥的第二种方法是只使用一个特定用途:然后您可以随时轻松撤销该密钥,重新生成一个专用于该访问的密钥,并注册新密钥。
也就是说,copy/pastingJenkins Web GUI 的密钥在您的客户端和 Jenkins 服务器之间进行加密传输被认为足够安全,尤其是在企业 LAN(局域网)环境中,以你自己的 Jenkins 服务器。
如果您是通过互联网在 WAN 上通话,那么……这不是完全 防弹保险箱。但对于某些 Jenkins 作业(除非这些作业泄露敏感数据),它应该足够好。
原位
为此使用网络 UI 对于几乎所有用例来说可能是安全的足够,并且在便利性方面很难被超越。
尽管如此,在需要的地方生成私钥当然是个好建议,而且使用 Jenkins 绝对是可能的。一种方法:
- 通过 SSH 连接到 Jenkins 服务器,并生成密钥
- 运行 一些 groovy 在脚本控制台中创建 Jenkins 凭据
- 泄露 public 密钥
- 删除服务器上生成的密钥
在这个例子中,在Jenkins服务器上$HOME
和$JENKINS_HOME
都指向/var/jenkins_home
,密钥在~/temp
中生成。
在 Jenkins 服务器上生成密钥
ssh jenkins@my.jenkins.server
mkdir ~/temp
cd ~/temp
ssh-keygen -t rsa -b 4096 -C "some-meaningful-label" -f "./my-in-situ-key"
这会在 /var/jenkins_home/temp
中创建 my-in-situ-key
和 my-in-situ-key.pub
。
创建 Jenkins 凭证
在 Jenkins 脚本控制台中:
import com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey
import com.cloudbees.plugins.credentials.CredentialsScope
import com.cloudbees.plugins.credentials.domains.Domain
def domain = Domain.global()
def store = Jenkins.instance.getExtensionList('com.cloudbees.plugins.credentials.SystemCredentialsProvider')[0].getStore()
def privateKeyString = new File('/var/jenkins_home/temp/my-in-situ-key').text
def keySource = new BasicSSHUserPrivateKey.DirectEntryPrivateKeySource(privateKeyString)
def privateKeyCredential = new BasicSSHUserPrivateKey(
CredentialsScope.GLOBAL,
"temp-stack-overflow-key", // id
"jenkins", // username
keySource, // private key
"", // passphrase
"Temporary Demo Key" // description
)
store.addCredentials(domain, privateKeyCredential)
"Credential Added"
清理前测试凭据。
清理
拿到public钥匙,出门时一定要删除私钥。
cat ~/temp/my-in-situ-key.pub
rm -rf ~/temp
简短的回答是"No"。如果您想在 Jenkins 服务器中使用 SSH 身份,请在那里生成一个不同的 public/private 密钥并将其专门用于该目的。