Win10 cmd命令行,Powershell,Linux子系统Ubuntu bash自动启动ssh-agent

2023-05-16

        当从win10的cmd命令行,PowerShell,或者Ubuntu子系统访问SSH服务器或者SSH Git Server,可以使用证书登录。但是默认情况下,需要每次都输入证书密码(passphrase),很不方便。

        使用Visual Studio Code的终端,可以设置为使用以上三种Shell之一【可参考 设置Visual Studio Code的默认SHELL (cmd / PowerShell / Ubuntu bash)】,在命令行下可以方便地访问SSH Git Server,但是每次push也仍然需要输入证书密码。

        本文就是为了解决这个问题, 分别说明在cmd命令行,Powershell,Linux子系统Ubuntu bash如何自动启动ssh-agent。首先,确认id_rsa文件已经存放到用户主目录的.ssh子文件夹下。

1. 在PowerShell的profile中设置ssh-agent自启动

Win10 PowerShell默认没有建立profile文件,运行 Test-Path $profile 命令可以查看,如果当前没有默认profile文件,会返回False:

PS C:\Users\simonliu> Test-Path $profile
False

然后运行 New-Item -path $profile -type file –force 就可以为当前用户建立一个新的profile文件,文件名为:

Microsoft.PowerShell_profile.ps1

PS C:\Users\simonliu> New-Item -path $profile -type file -force


    目录: E:\Documents\WindowsPowerShell


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2018/12/25     22:22              0 Microsoft.PowerShell_profile.ps1


PS C:\Users\simonliu>

默认路径是 Documents(我的文档)文件夹的WindowsPowerShell子文件夹下,(我已经把“我的文档”迁移到“E:\Documents”文件夹)。

双击此文件,添加一行内容即可:

start-ssh-agent

如果此前没有运行过ssh-agent,那么需要把密钥文件添加一次 (注意文件路径)

C:\Users\simonliu\.ssh>ssh-add id_rsa

首次添加可能需要输入密码。 

但是我们现在启动PowerShell窗口,会提示:

  : 无法加载文件 E:\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1,因为在此系统上禁止运行脚本。有关详细
信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。
所在位置 行:1 字符: 3
+ . 'e:\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1'
+   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [],PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

此时我们运行 get-executionpolicy ,会显示 “Restricted”。Restricted 执行策略不允许任何脚本运行。

PS C:\Windows\system32> get-executionpolicy
Restricted

 

我们需要运行PowerShell(管理员)输入 set-executionpolicy remotesigned

set-executionpolicy remotesigned

然后随后输入"Y"确认。

PS C:\Windows\system32> set-executionpolicy remotesigned

执行策略更改
执行策略可帮助你防止执行不信任的脚本。更改执行策略可能会产生安全风险,如 https:/go.microsoft.com/fwlink/?LinkID=135170
中的 about_Execution_Policies 帮助主题所述。是否要更改执行策略?
[Y] 是(Y)  [A] 全是(A)  [N] 否(N)  [L] 全否(L)  [S] 暂停(S)  [?] 帮助 (默认值为“N”): y
PS C:\Windows\system32>

然后每次启动PowerShell窗口就会运行start-ssh-agent,访问ssh服务器再也不需要每次手动输入密码了。

根据其他文章的资料,把这个文件重命名为profile.ps1文件并放到“%windir%\system32\WindowsPowerShell\v1.0\
”文件夹,即可对所有用户生效。

2. Ubuntu 子系统 bash 下的ssh-agent自启动设置

方法1:(在Win10 Professional 1809 Ubuntu 18.04.1 LTS 测试通过):在bash profile文件(~/.bashrc)里面添加如下内容:

if [ ! -S ~/.ssh/ssh_auth_sock ]; then
  eval `ssh-agent`
  ln -sf "$SSH_AUTH_SOCK" ~/.ssh/ssh_auth_sock
fi
export SSH_AUTH_SOCK=~/.ssh/ssh_auth_sock
ssh-add -l > /dev/null || ssh-add

方法2: 在bash profile文件(~/.bashrc)里面添加如下内容:

start_ssh_agent() {
    # Try to use an existing agent
    save=~/.ssh-agent
    if [[ -e "$save" ]]
    then
        . "$save" > /dev/null
    fi
    # No existing agent, start a new one
    if [[ -z "$SSH_AGENT_PID" || ! -e "/proc/$SSH_AGENT_PID" ]]
    then
        ssh-agent > "$save"
        . "$save" > /dev/null
        ssh-add
    fi
}
start_ssh_agent

方法3:(不推荐):网上的很多资料,都只说在bash profile文件(~/.bashrc)里面添加两行:

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa

其中 eval "$(ssh-agent -s)" 代表启动ssh-agent并放入后台。

但是这样的设置,也只对当前的bash session有效,新开一个bash就需要重新输入密码了。

Agent pid 18715
Enter passphrase for /home/simonliu/.ssh/id_rsa:

 方法4:(多次测试不能成功验证):通过keychain对密钥进行管理,我这里测试了很多次,都不能成功。 

3. cmd 命令行的profile

Windows 命令提示符的默认 Profile 文件位置可以通过在如下注册表键来添加自定义的 Bat 批处理文件的位置即可完成对命令提示符的自定义:

HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun

应该在bat文件里加上 ssh-agent和ssh-add C:\Users\simonliu\.ssh\id_rsa即可,我没有做进一步测试。本人主要是为了使用git,所以不打算用cmd命令行了。

 

参考文献:

1. How can I run ssh-add automatically, without password prompt?

2. PowerShell for Beginners (Part 6): PowerShell Profiles and the ISE

3. PowerShell因为在此系统中禁止执行脚本解决方法

4. Keychain

5. Straight forward way to run ssh-agent and ssh-add on login via SSH?

6. 定制自己的命令行环境

7. Generating a new SSH key and adding it to the ssh-agent

8. Running SSH Agent when starting Git Bash on Windows

9. Persistent ssh-agent on Bash on Ubuntu on Windows

10. windows-bash-ssh-agent

11. Windows subsystem for linux - share ssh-agent?

12. How can I run ssh-add automatically, without password prompt?

13. Powershell Profiles配置文件的存放位置介绍

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Win10 cmd命令行,Powershell,Linux子系统Ubuntu bash自动启动ssh-agent 的相关文章

  • 禁止鼠标唤醒睡眠的电脑,无线鼠标、蓝牙鼠标

    经常一不小心碰到鼠标就会唤醒睡眠的电脑 xff0c 有时咳嗽声大一点也能唤醒 解决方法 xff1a xff08 1 xff09 打开 设备管理器 在 此电脑 上右键 xff0c 属性 左侧找到设备管理器 或者 xff0c 在开始按钮上右键
  • C#与C++ dll 之间传递字符串string wchar_t* char* IntPtr

    1 由C 向C 43 43 dll 传入字符串时 xff0c 参数直接用string xff0c 设置编码格式 CharSet Unicode CharSet Ansi C 43 43 dll接收使用wchar t 或 char 2 由C
  • SwiftUI 导航 NavigationStack NavigationLink navigationDestination

    导航的显示区域使用NavigationStack 导航的新视图会显示在NavagationStack中 左右分栏导航使用NavigationSplitView 触发导航的按钮使用NavigationLink 示例1 显示颜色视图 struc
  • SwiftUI 数组初始化 append 不工作 无效 init中 State Array

    State的数组在初始化函数init是不能添加数据的 xff0c append在init中无效 xff0c 不能添加数据 实现方法如下 xff1a 采用视图控件的回调函数 appear if myArray count 61 61 0 my
  • SwiftUI List 中 多个 按钮 button 同时触发 buttonStyle

    在list中的一个单元格中设置多个按钮会出现同时触发的问题 xff0c 解决方法是增设按钮的类型属性 buttonStyle borderless 在List的单元格中 xff0c 按钮的下面 buttonStyle borderless
  • 隐私策略

    隐私权声明 软件注重对您的个人隐私的保护 我们不会在任何情况下收集您的信息 本隐私权声明适用于本软件的所有相关服务 您个人信息的搜集 本软件不收集任何您的个人信息 控制您的个人信息 本软件不控制您的任何个人信息 您个人信息的安全 严格保护您
  • MMPlayer同步文件到手机应用中的方法

    自己准备好要同步的文件 xff0c 如mp3 mp4 xff0c 然后按照如下操作 xff1a xff08 1 xff09 mac电脑插上iPhone xff08 2 xff09 打开访达Finder xff08 3 xff09 在左上列表
  • 全世界到底有多少软件开发人员?

    埃文斯数据公司 Evans Data Corporation 2019 最新的统计数据 xff08 原文 xff09 显示 xff0c 2018 年全球共有 2300 万软件开发人员 xff0c 预计到 2019 年底这个数字将达到 264
  • 并查集【通俗易懂】【知识点】

    为了解释并查集的原理 xff0c 我将举一个有爱的例子 话说江湖上散落着各式各样的大侠 xff0c 有上千个之多 他们没有什么正当职业 xff0c 整天背着剑在外面走来走去 xff0c 碰到和自己不是一路人的 xff0c 就免不了要打一架
  • QtreeWiget各节点之间连线样式设置

    QTreeWidget树状图默认各节点直接是没有线连接的 xff0c 看着层次感不强 xff0c 用户体验不太好 xff0c 所以需要设置一下样式 方法一 xff1a 通过对qtreewidget进行qss样式设置 效果图如下 xff1a
  • gitlab安装部署及问题解决(实践篇)

    系统环境 xff1a centos7 9 gitlab版本 xff1a 11 1 4 一 GitLab简介 GitLab 是一个用于仓库管理系统的开源项目 xff0c 使用Git作为代码管理工具 xff0c 并在此基础上搭建起来的web服务
  • 详解利用nodejs对json文件进行新增数据及删除指定的数据

    细节链接 详解利用nodejs对本地json文件进行增删改查 文件 1 首先存在packagename json文件 xff0c 具体内容如下 34 label 34 34 星享优惠 34 34 value 34 34 com kyy xx
  • VS.NET中Web Services入门

    Visual Studio NET 中的 XML Web services 入门 摘要 xff1a Microsoft Visual Studio NET 和 XML Web services 提供了一个简单 灵活且基于标准的模型 xff0
  • Openstack Manila使用初探 (Packstack)

    使用Packstack All in one 安装好Openstack之后 研究一下Manila组件的使用 主机名 cloud 192 168 31 233 1 manila conf 1 1 配置文件分析 Packstack的配置文件pa
  • Centos7+Packstack安装部署Openstack Mitaka之(一) 安装Packstack

    学习Openstack的前两个月 时间都花在环境部署上了 主要是版本的问题 导致了一系列的麻烦 之前使用devstack已经部署成功了 但是manila不能用 残念 问题主要出在网络上 研究完manila的网络模块之后再回头找原因吧 不打算
  • Tomcat的四种web应用部署方式详解

    在Tomcat中有四种部署Web应用的方式 xff0c 简要的概括分别是 xff1a xff08 1 xff09 利用Tomcat自动部署 xff08 2 xff09 利用控制台进行部署 xff08 3 xff09 增加自定义的Web部署文
  • 虚拟机linux插入U盘搜索不到怎么整

    我在 dev下找 xff0c 使用fdisk xff0c 都没有找到插入的u盘 看了下服务 vmware的USB也是开启的 最后发现vmware的USB是2 0 xff0c 改成3 0就好了 又白白浪费了半天时间
  • 使用adb查看Settings Provider的值

    使用adb查看Settings Provider的值 前言 在Android的ROM开发中 xff0c 经常会遇到一些修改系统默认的Settings Provider的值要求 xff0c 那么修改以后 xff0c 怎么验证呢 本篇文章介绍一
  • DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

    本文作者 xff1a PETER LAI xff0c 是 Diode 的区块链工程师 在进入软件开发领域之前 xff0c 他主要是在做工商管理相关工作 Peter Lai 也是一位活跃的开源贡献者 目前 xff0c 他正在与 Diode 团
  • 【EasyExcel】EasyExcel导入合并单元格的数据

    以下代码可以用来处理带有合并单元格的数据导入 span class token keyword import span span class token namespace cn span class token punctuation s

随机推荐