Scenario: You are building a Dockerfile or trying to run apt-get at work, but the network policy is blocking both direct access to the keyserver and through a correctly-configured proxy.
Let's say we're trying to install mono, which has the following instruction - but it hangs inexplicably.
sudo apt-key adv --keyserver \ hkp://keyserver.ubuntu.com:80 \ --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
Take note of the key specified in
--recv-keys, this is the part we need to copy/paste into the next steps.
The work-around (tl;dr):
Step 1: Log into a computer in the free world (VPN/tunnel/mobile-hotspot/open WiFi network etc).
Step 2: Export the key to a text file.
Step 3: Copy the contents of the file across to the machine, and import it.
$ export keyid=3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF $ gpg --keyserver keyserver.ubuntu.com --recv $keyid && gpg --export --armor $keyid > key.txt gpg: requesting key D3D831EF from hkp server keyserver.ubuntu.com gpg: key D3D831EF: "Xamarin Public Jenkins (auto-signing) <email@example.com>" not changed gpg: Total number processed: 1 gpg: unchanged: 1
Alter the value of keyid as per your needs
The file key.txt can now be copied across to your locked-down machine by email, copy/paste, etc into a file named key.txt.
cat key_file | sudo apt-key add -
If you are doing this inside a Dockerfile, then you could use the
ADD command to put the key in /tmp/.
Now continue with the rest of the instructions and the apt-repository will now be accepted by the system.