Git Product home page Git Product logo

omnisshagent's Introduction

OmniSSHAgent

OmniSSHAgent

About

Unifies the chaotic ssh-agent state under Windows.

The Chaotic State of SSH-Agent on Windows

There are several different communication methods for ssh-agent in Windows, and it is very complicated to use and configure them. The following diagram shows the current communication methods for Windows ssh-agent. windows-ssh-agent-chaosmap

Connection diagram of OmniSSHAgent

OmniSSHAgent is a program to simplify what used to be a chaotic situation, as shown in the following figure. OmniSSHAgentmap

Required environment for operation

The following interfaces are supported

  • pageant.exe(PuTTY) shared memory
  • Unix domain socket for WSL2
  • NamedPipe on Windows
  • Unix domain socket for WSL1
  • Unix domain socket for MSYS2(Cygwin) ( #1 )

Usage

  1. Download OmniSSHAgent.zip from https://github.com/masahide/OmniSSHAgent/releases/latest, unzip it, and place it in a folder of your choice.
  2. If you are using Windows native ssh-agent, you'll need to stop and disable it. Open powershell with administrator privileges and execute the following commands.
Stop-Service ssh-agent
Set-Service -StartupType Disabled ssh-agent
  • Alternatively, you can set it through the GUI if you prefer.Bring up the start menu and type Services. You’ll see the Services app listed. Once the Services app is open, find the OpenSSH Authentication Agent service and set the Service Status to Stop and the Startup Type to Disabled.
  1. If you are using PuTTY Pageant - stop it.

  2. Launch OmniSSHAgent.exe by double-clicking.

  3. Press the Open new file button to add a private key file. Or you can use ssh-add command or KeePassXC to add your private key.

Registering for launch on boot

OmniSSHAgent does not have an installer, nor registers itself to start upon boot. You'll need to do the following to register it:

  • Press the Windows logo key + R, type shell:startup, then click OK. This opens the Startup folder.
  • Copy and paste the shortcut to the OmniSSHAgent.exe from the file location to the Startup

Using with WSL2

Setting up socat pipe in Ubuntu(WSL2).

Choose the instructions for your favourite shell below. If your shell isn't listed here you can convert the bash script to your shell syntax and send a PR to add it to the repo.

Bash (and all POSIX-compliant shells)
  1. Download ubuntu.setup.sh with the following command:
mkdir -p $HOME/omni-socat
curl -sL https://raw.githubusercontent.com/masahide/OmniSSHAgent/main/hack/ubuntu.setup.sh -o $HOME/omni-socat/ubuntu.setup.sh
  1. Add the following line to ~/.bashrc, ~/.zshrc, or whatever file is applicable to your shell:
source $HOME/omni-socat/ubuntu.setup.sh
Fish
  1. Download ubuntu-fish.setup.fish with the following command:
mkdir -p $HOME/omni-socat
curl -sL https://raw.githubusercontent.com/masahide/OmniSSHAgent/main/hack/ubuntu-fish.setup.fish -o $HOME/omni-socat/ubuntu-fish.setup.fish
  1. Add the following line to ~/.config/fish/config.fish:
. $HOME/omni-socat/ubuntu-fish.setup.fish

Setting up socat pipe in rocky linux.

  1. Download rocky.setup.sh with the following command
mkdir -p $HOME/omni-socat
curl -sL https://raw.githubusercontent.com/masahide/OmniSSHAgent/main/hack/rocky.setup.sh -o $HOME/omni-socat/rocky.setup.sh
  1. Add the following line to ~/.bashrc, ~/.zshrc, or whatever file is applicable to your shell:
source $HOME/omni-socat/rocky.setup.sh

Using with WSL1

Setting up Unix doman socket in ubuntu environment.

  1. Check the setting of Unix domain socket file path(WSL1): in OmniSSHAgent. For example, if you have the following settings.. (UserName varies depending on your environment) C:\Users\<UserName>\OmniSSHAgent.sock The WSL1 path will be /mnt/c/Users/<UserName>/OmniSSHAgent.sock.

  2. Add the following line to ~/.bashrc

export SSH_AUTH_SOCK=/mnt/c/Users/<UserName>/OmniSSHAgent.sock

Using with Cygwin/MSYS2/Git for windows/(GitBash)

  1. Check the setting of Cygwin Unix domain socket file path(MSYS2): in OmniSSHAgent.

    • For example, if you have the following settings.(UserName varies depending on your environment).
    • C:\Users\<UserName>\OmniSSHCygwin.sock.
    • The Cygwin path will be /mnt/c/Users/<UserName>/OmniSSHCygwin.sock.
  2. On the Windows taskbar, right-click the Windows icon and select System. In the Settings window, under Related Settings, click Advanced system settings.

    • On the Advanced tab, click Environment Variables.
    • Users variables Click on Create new to create a new environment variable.
    • Set the following values(UserName varies depending on your environment).
Variable name:  SSH_AUTH_SOCK
Variable Value: /mnt/c/Users/<UserName>/OmniSSHAgent.sock

Using with 1Password proxy mode

This is a mode using 1Password's ssh-agent function as a backend as shown in the following figure. 1Password-Proxy-mode

By setting "Enable proxy mode for 1Password key-agent" in the configuration, OmniSSHAgent becomes a Proxy that works with 1Password's ssh-agent as a backend.

When "Enable proxy mode for 1Password key-agent" is enabled, OmniSSHAgent operates as a mere proxy, and therefore, private keys cannot be added.

Supported key file formats

  • PuTTY private key file (.ppk) file format
  • OpenSSH format

Supported key formats

  • rsa
  • ecdsa
  • ed25519

(dsa, ecdsa-sk, ed25519-sk are not supported)

FAQ

Where is the passphrase for the private key stored?

It's stored in Windows Credential Manager.

Screen shot

omnisshagent's People

Contributors

maicol07 avatar masahide avatar r3zy avatar randers00 avatar schmonz avatar subaruarai avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

omnisshagent's Issues

Keepassxc over pageant_shm integration doesn't seem to work

Getting 'Agent protocol error' in Keepassxc while trying to do so.
I lack the understanding of how it works to locate where the error occurs, or it's not working just for me since something else are broken/misconfigured.

Steps to reproduce:

Run OmniSSHAgent with default config.
Start KeepassXC with "Use Pageant" selected, Click "OK".
Get "Agent protocol error." message whenever you try to add keys / open up SSH Agent config.

// OpenSSH works just fine tho

omni-socat.exe cannot run when placed in the WSL filesystem

After #44, I still had the same issue one of my two machines. The socat process was running, but I found out that omni-socat.exe would not run:

ruben@RANDERS01:~$ ./omni-socat/omni-socat.exe
./omni-socat/omni-socat.exe: Invalid argument
                                             ruben@RANDERS01:~$

I eventually moved omni-socat.exe to /mnt/c/omni-socat.exe, changed the path in the bash script, and then it started working after a terminal restart.

I'm not sure how to debug this one to provide more details, so if you have any pointers, please let me know, I'll try my best to help debug this issue!

Can't get WSL2 socket working

Hi,
I've followed the WSL2 steps but it doesn't seem working:

$ source $HOME/omni-socat/ubuntu-bash.setup.sh
$ ssh-add -l
error fetching identities: communication with agent failed

However, it seems the $SSH_AUTH_SOCK has changed:

$ echo $SSH_AUTH_SOCK
/home/maicol07/.ssh/agent.sock

I'm using the 1Password proxy mode.
Can you help me?
Thanks

Cannot retrieve comment information for private keys in OpenSSH format

In the golang.org/x/crypto/ssh/agent implementation
https://github.com/golang/crypto/blob/86341886e2925764dc890ad96c141a1bc76043af/ssh/keys.go#L1338-L1451
xParsed comment information has been discarded.

	case KeyAlgoED25519:
		key := struct {
			Pub     []byte
			Priv    []byte
			Comment string
			Pad     []byte `ssh:"rest"`
		}{}

		if err := Unmarshal(pk1.Rest, &key); err != nil {
			return nil, err
		}
		pk := ed25519.PrivateKey(make([]byte, ed25519.PrivateKeySize))
		copy(pk, key.Priv)
		return &pk, nil

1Password mode not working on boot

I've found sometimes OmniSSHAgent seems to not work on startup, but after a while it comes good.

Using ssh-add -l shows the keys fine, likewise using git (which is configured to use the native openssh client) also works fine proving the 1Password SSH Agent is working, but using anything that uses the PuTTY Agent socket seems to hang for 30 seconds or so until it eventually times out and falls back to using password auth. Note it does still display the name of the SSH key it was attempting to use, so some comms between OmniSSHAgent and the 1Password agent is happening, but it's as if it's failing to pop up the auth prompt.

Simply restarting OmniSSHAgent or locking and unlocking the machine doesn't fix it, but after some arbitrary amount of time it seems to come good and just start working again.

Named pipe stops working after a while the system is on

It seems that named pipe stops working after a while the system is on:

PS C:\Users\Maicol> ssh-add -l
Error connecting to agent: No such file or directory
PS C:\Users\Maicol> Get-ChildItem \\.\pipe\|findstr open
------        01/01/1601     01:00              1 openssh-ssh-agent

WSL:

  ~ ❯ ssh-add -l                                                                                              19:43:23
error fetching identities: communication with agent failed

However, Git bash works:

$ ssh-add -l
3072 SHA256:xInBcA48YT6jmmOEWQrXtC+xw+c6V2V2cVgAWT6K9hg id_rsa (RSA)
256 SHA256:ZgvmgA5CNIpEbTZWepclAdXC9fVBFsB1kvmM14Egjm8 id_ed25519 (ED25519)

I've currently tested the named pipe mode and the 1password proxy mode and the two modes are affected.
Do you have any clue?
Thanks

OmniSSHAgent.exe: Please state more precisely the installation and usage of the (WIN) binary

First: Thx a lot for the awesome solution!
I got it working quite well following the instruction in README.md Only thing a little unclear to me was "4. Run OmniSSHAgent.exe" under USAGE. As the "exe" is excutable as well as from within WSL and also from WIN11 environment, I needed one more attempt to get it working when running it from within WIN11. Still the following is not yet fully clear to me ..

  • OmniSSHAgent needs to be started as the same user as the user invoking WSL. It does not work if started "as Administrator".
  • After a system Re-Boot I need to start OmniSSHAgent at least once to make it work again. I can close it right after and it seems to continue to work.
    As of the first point it doesn't work running it as a Windows service, I'd like to know what would be a suitable/recommended way of starting the program after system restart. I assume that starting it as part of some "Run-at-Start" (Login) group would be the way to go. But I'd appriciate some guidance/instructions from expert how to best implement this.

thx
-stefan

No using asyncIO or Overlapped Results.

https://github.com/boostchicken/wsl2-gpg-ssh-agent/blob/407c5280abf6864e59df3f4d63e910e299951609/main.go#L338-L364

https://github.com/boostchicken/wsl2-gpg-ssh-agent/blob/main/overlapped.go

This is why you are seeing some issues with multiple processes not using pipes correctly I double chechekd go-wino's code and they still don't use it where it's needed or make use of events which really lowers processing overhead (my code does this)

also why not use a vsock in SOCAT, safer, faster, support in Go for it. Just connect a vsock right to your namedpipe.

That we repo is mine and I have been using it for a while. Feel free to steal anything you want.

Populating duplicate tray entries

Every time program restarts it populates tray icon duplicates in windows options (not the tray itself), and forgets if it has "visible" option checked.

I prefer to have all the tray icons visible, and drag tray icon out from 'hidden' to stay near keepass every time program restarts.
After several times doing that, it populated taskbar settings dialog quite a bit.
Screenshot 2022-10-19 025430

This may not be a bug since I've made some tweaks on my system, neither it is a real problem after selecting to show them all in explorer shell:::{05d7b0f4-2121-4eff-bf6b-ed3f69b894d9} windows dialog.

Also, if I restart Explorer, icon is gone for good.

Windows 11 pro build 22621.674

ubuntu-bash.setup.sh improvements

I have found two improvements that could be made to ubuntu-bash.setup.sh:

  1. Install unzip (Because it was not installed in my debian WSL and the script didn't work)
  2. Add -f to rm omni-socat.zip (Because I have the alias rm='rm -i' in my .bashrc, I get a prompt for deleting the file)

ecdsa-sk and ed25519-sk support

First of all great work you did here.

Is there any way to support you so that support for ecdsa-sk, ed25519-sk will be integrated in the future?

WSL2 "error fetching identities: communication with agent failed"

When I run ssh-add -l, I get the following error:

error fetching identities: communication with agent failed

I've read the previous issue on this (#16), here are my command outputs for the same commands you wanted the other issue reporter to run:

$ ps axuw | grep socat
ruben       15  0.0  0.0  10304  3016 ?        Ss   10:40   0:00 socat UNIX-LISTEN:/home/ruben/.ssh/agent.sock,fork EXEC:/home/ruben/omni-socat/omni-socat.exe,nofork
ruben     1434  0.0  0.0   6332  2004 pts/0    S+   10:47   0:00 grep socat
> Get-ChildItem \\.\pipe\|findstr open
    Directory: \\.\pipe\openvpn
------        1601-01-01     01:00              1 openvpn\service
------        1601-01-01     01:00              2 openssh-ssh-agent

Using pageant apps and OpenSSH apps on Windows works just fine.

I'm not sure if this is the problem, but when I run omni-socat.exe manually from WSL2, I get:

$ strace -ff -o st ./omni-socat.exe
./omni-socat.exe: Invalid argument

I ran strace on omni-socat:

execve("./omni-socat.exe", ["./omni-socat.exe"], 0x7fff43d828e8 /* 29 vars */) = 0
arch_prctl(ARCH_SET_FS, 0x406b40)       = 0
set_tid_address(0x406ae0)               = 1744
gettid()                                = 1744
gettid()                                = 1744
gettid()                                = 1744
gettid()                                = 1744
brk(NULL)                               = 0x1622000
brk(0x1624000)                          = 0x1624000
mmap(0x1622000, 4096, PROT_NONE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x1622000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb2a77cb000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb2a77ca000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb2a77c9000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb2a77c8000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb2a77c7000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb2a77c6000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb2a77c5000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb2a77c4000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb2a77c3000
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb2a77c1000
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb2a77bf000
sched_getaffinity(0, 128, [0 1 2 3 4 5 6 7 8 9 10 11]) = 32
getpid()                                = 1744
getpid()                                = 1744
uname({sysname="Linux", nodename="RANDERS01", ...}) = 0
getcwd("/home/ruben/omni-socat", 4096)  = 23
readlink("omni-socat.exe", 0x7ffe1a3fa570, 4096) = -1 EINVAL (Invalid argument)
getcwd("/home/ruben/omni-socat", 4097)  = 23
open("/proc/self/mountinfo", O_RDONLY|O_LARGEFILE) = 3
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb2a77be000
read(3, "64 68 0:26 / /mnt/wsl rw,relatim"..., 1024) = 1024
read(3, "me shared:21 - devpts devpts rw,"..., 1024) = 1024
read(3, "e shared:34 - cgroup cgroup rw,c"..., 1024) = 1024
read(3, "oup/rdma rw,nosuid,nodev,noexec,"..., 1024) = 721
read(3, "", 1024)                       = 0
close(3)                                = 0
munmap(0x7fb2a77be000, 4096)            = 0
mmap(NULL, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb2a77bb000
getcwd("/home/ruben/omni-socat", 4096)  = 23
munmap(0x7fb2a77bb000, 16384)           = 0
getcwd("/home/ruben/omni-socat", 4096)  = 23
open("/proc/self/mountinfo", O_RDONLY|O_LARGEFILE) = 3
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb2a77be000
read(3, "64 68 0:26 / /mnt/wsl rw,relatim"..., 1024) = 1024
read(3, "me shared:21 - devpts devpts rw,"..., 1024) = 1024
read(3, "e shared:34 - cgroup cgroup rw,c"..., 1024) = 1024
read(3, "oup/rdma rw,nosuid,nodev,noexec,"..., 1024) = 721
read(3, "", 1024)                       = 0
close(3)                                = 0
munmap(0x7fb2a77be000, 4096)            = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb2a77bd000
ioctl(0, TCGETS, {c_iflag=ICRNL|IXON, c_oflag=NL0|CR0|TAB0|BS0|VT0|FF0|OPOST|ONLCR, c_cflag=B38400|CS8|CREAD, c_lflag=ISIG|ICANON|ECHO|ECHOE|ECHOK|IEXTEN|ECHOCTL|ECHOKE, ...}) = 0
ioctl(1, TCGETS, {c_iflag=ICRNL|IXON, c_oflag=NL0|CR0|TAB0|BS0|VT0|FF0|OPOST|ONLCR, c_cflag=B38400|CS8|CREAD, c_lflag=ISIG|ICANON|ECHO|ECHOE|ECHOK|IEXTEN|ECHOCTL|ECHOKE, ...}) = 0
ioctl(2, TCGETS, {c_iflag=ICRNL|IXON, c_oflag=NL0|CR0|TAB0|BS0|VT0|FF0|OPOST|ONLCR, c_cflag=B38400|CS8|CREAD, c_lflag=ISIG|ICANON|ECHO|ECHOE|ECHOK|IEXTEN|ECHOCTL|ECHOKE, ...}) = 0
ioctl(0, TIOCGPGRP, [1741])             = 0
getpgid(0)                              = 1741
fstat(0, {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0), ...}) = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0), ...}) = 0
fstat(2, {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0), ...}) = 0
ioctl(0, TIOCGWINSZ, {ws_row=69, ws_col=270, ws_xpixel=0, ws_ypixel=0}) = 0
ioctl(0, SNDCTL_TMR_START or TCSETS, {c_iflag=, c_oflag=NL0|CR0|TAB0|BS0|VT0|FF0|ONLCR, c_cflag=B38400|CS8|CREAD, c_lflag=ECHOE|ECHOK|ECHOCTL|ECHOKE, ...}) = 0
dup(0)                                  = 3
socket(AF_VSOCK, SOCK_STREAM|SOCK_CLOEXEC, 0) = 4
bind(4, {sa_family=AF_VSOCK, svm_cid=VMADDR_CID_ANY, svm_port=VMADDR_PORT_ANY, svm_flags=0}, 16) = 0
getsockname(4, {sa_family=AF_VSOCK, svm_cid=VMADDR_CID_ANY, svm_port=0xe00a7bed, svm_flags=0}, [16]) = 0
listen(4, 4)                            = 0
access("/run/WSL/8_interop", F_OK)      = 0
socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0) = 5
connect(5, {sa_family=AF_UNIX, sun_path="/run/WSL/8_interop"}, 110) = 0
write(5, "\7\0\0\0I\1\0\0\355{\n\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 329) = 329
poll([{fd=4, events=POLLIN}], 1, 10000) = 1 ([{fd=4, revents=POLLIN}])
accept4(4, {sa_family=AF_VSOCK, svm_cid=VMADDR_CID_HOST, svm_port=0xa5ebd9da, svm_flags=0}, [16], SOCK_CLOEXEC) = 6
poll([{fd=4, events=POLLIN}], 1, 10000) = 1 ([{fd=4, revents=POLLIN}])
accept4(4, {sa_family=AF_VSOCK, svm_cid=VMADDR_CID_HOST, svm_port=0xa5ebd9db, svm_flags=0}, [16], SOCK_CLOEXEC) = 7
poll([{fd=4, events=POLLIN}], 1, 10000) = 1 ([{fd=4, revents=POLLIN}])
accept4(4, {sa_family=AF_VSOCK, svm_cid=VMADDR_CID_HOST, svm_port=0xa5ebd9dc, svm_flags=0}, [16], SOCK_CLOEXEC) = 8
poll([{fd=4, events=POLLIN}], 1, 10000) = 1 ([{fd=4, revents=POLLIN}])
accept4(4, {sa_family=AF_VSOCK, svm_cid=VMADDR_CID_HOST, svm_port=0xa5ebd9dd, svm_flags=0}, [16], SOCK_CLOEXEC) = 9
close(4)                                = 0
rt_sigprocmask(SIG_BLOCK, [INT WINCH], NULL, 8) = 0
signalfd4(-1, [INT WINCH], 8, 0)        = 4
poll([{fd=0, events=POLLIN}, {fd=7, events=POLLIN}, {fd=8, events=POLLIN}, {fd=9, events=POLLIN}, {fd=4, events=POLLIN}], 5, -1) = 1 ([{fd=9, revents=POLLIN}])
recvfrom(9, "\n\0\0\0 \0\0\0", 8, MSG_WAITALL, NULL, NULL) = 8
recvfrom(9, "\26\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 24, 0, NULL, NULL) = 24
writev(2, [{iov_base="./omni-socat.exe: Invalid argume"..., iov_len=35}, {iov_base=NULL, iov_len=0}], 2) = 35
close(4)                                = 0
close(5)                                = 0
close(9)                                = 0
close(8)                                = 0
close(7)                                = 0
close(6)                                = 0
munmap(0x7fb2a77bd000, 8192)            = 0
ioctl(3, SNDCTL_TMR_START or TCSETS, {c_iflag=ICRNL|IXON, c_oflag=NL0|CR0|TAB0|BS0|VT0|FF0|OPOST|ONLCR, c_cflag=B38400|CS8|CREAD, c_lflag=ISIG|ICANON|ECHO|ECHOE|ECHOK|IEXTEN|ECHOCTL|ECHOKE, ...}) = 0
close(3)                                = 0
munmap(0x7fb2a77c1000, 8192)            = 0
munmap(0x7fb2a77c3000, 4096)            = 0
munmap(0x7fb2a77c5000, 4096)            = 0
munmap(0x7fb2a77c6000, 4096)            = 0
munmap(0x7fb2a77c7000, 4096)            = 0
munmap(0x7fb2a77c8000, 4096)            = 0
munmap(0x7fb2a77c9000, 4096)            = 0
munmap(0x7fb2a77ca000, 4096)            = 0
munmap(0x7fb2a77cb000, 4096)            = 0
exit_group(1)                           = ?
+++ exited with 1 +++

gpg-agent support

Would be great to either support gpg-agent or allow the native one to run simultaneously.

Tested with GPG 2.40.0 and Gpg4Win 4.1.0 using a Yubikey on Windows 10, and the either Omni agent will work (specifically 1password proxy mode only) or gpg-agent but not both at the same time.

gpg-agent.conf

enable-putty-support
enable-ssh-support

Use case: authenticating using ssh keys both in 1password and on Yubikey via gpg

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.