Hide

What's this?

commandlinefu.com is the place to record those command-line gems that you return to again and again.

Delete that bloated snippets file you've been using and share your personal repository with the world. That way others can gain from your CLI wisdom and you from theirs too. All commands can be commented on, discussed and voted up or down.


If you have a new feature suggestion or find a bug, please get in touch via http://commandlinefu.uservoice.com/

Get involved!

You can sign-in using OpenID credentials, or register a traditional username and password.

First-time OpenID users will be automatically assigned a username which can be changed after signing in.

Hide

Stay in the loop…

Follow the Tweets.

Every new command is wrapped in a tweet and posted to Twitter. Following the stream is a great way of staying abreast of the latest commands. For the more discerning, there are Twitter accounts for commands that get a minimum of 3 and 10 votes - that way only the great commands get tweeted.

» http://twitter.com/commandlinefu
» http://twitter.com/commandlinefu3
» http://twitter.com/commandlinefu10

Subscribe to the feeds.

Use your favourite RSS aggregator to stay in touch with the latest commands. There are feeds mirroring the 3 Twitter streams as well as for virtually every other subset (users, tags, functions,…):

Subscribe to the feed for:

Hide

News

2011-03-12 - Confoo 2011 presentation
Slides are available from the commandlinefu presentation at Confoo 2011: http://presentations.codeinthehole.com/confoo2011/
2011-01-04 - Moderation now required for new commands
To try and put and end to the spamming, new commands require moderation before they will appear on the site.
2010-12-27 - Apologies for not banning the trolls sooner
Have been away from the interwebs over Christmas. Will be more vigilant henceforth.
2010-09-24 - OAuth and pagination problems fixed
Apologies for the delay in getting Twitter's OAuth supported. Annoying pagination gremlin also fixed.
Hide

Tags

Hide

Functions

Copy your ssh public key to a server from a machine that doesn't have ssh-copy-id

Terminal - Copy your ssh public key to a server from a machine that doesn't have ssh-copy-id
cat ~/.ssh/id_rsa.pub | ssh user@machine "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"
2009-02-05 19:37:56
User: DEinspanjer
Functions: cat ssh
50
Copy your ssh public key to a server from a machine that doesn't have ssh-copy-id

If you use Mac OS X or some other *nix variant that doesn't come with ssh-copy-id, this one-liner will allow you to add your public key to a remote machine so you can subsequently ssh to that machine without a password.

Alternatives

There are 16 alternatives - vote for the best!

Terminal - Alternatives
ssh-copy-id username@hostname
ssh-copy-id user@host
2009-08-07 16:36:19
User: matthewbauer
Functions: ssh
4

Same as original just no $ at start

cat ~/.ssh/id_rsa.pub | ssh <REMOTE> "(cat > tmp.pubkey ; mkdir -p .ssh ; touch .ssh/authorized_keys ; sed -i.bak -e '/$(awk '{print $NF}' ~/.ssh/id_rsa.pub)/d' .ssh/authorized_keys; cat tmp.pubkey >> .ssh/authorized_keys; rm tmp.pubkey)"
2011-09-30 07:39:24
User: tamouse
Functions: cat ssh
Tags: ssh awk
4

This one is a bit more robust -- the remote machine may not have an .ssh directory, and it may not have an authorized_keys file, but if it does already, and you want to replace your ssh public key for some reason, this will work in that case as well, without duplicating the entry.

ssh-copy-id host
2012-07-24 08:43:41
Functions: ssh
0

If the username on the remote host is the same as on the local machine you can omit the username.

cat ~/.ssh/id_rsa.pub | ssh user@host 'cat >> ~/.ssh/authorized_keys'
2012-12-08 17:00:47
User: eneko
Functions: cat ssh
0

Alternative for machines without ssh-copy-id

Know a better way?

If you can do better, submit your command here.

What others think

This can also be done with ssh-copy-id.

Comment by Burn 302 weeks and 6 days ago

modded down because it absolutely duplicates ssh-copy-id

ssh-copy-id user@host
Comment by markdrago 302 weeks and 6 days ago

I would use:

scp ~/.ssh/id_rsa.pub user@machine:.ssh/authorized_keys

Comment by pixel 302 weeks and 6 days ago

Yep, what's wrong with scp?

Comment by fzero 302 weeks and 6 days ago

pixel ... have you now not just overwritten the destination servers authorized_keys?

ssh-copy-id does it all for you and as safely as possible... give it a whirl

What have you got to loose? (apart from sanity, health, job, etc)

Comment by finkployd 302 weeks and 6 days ago

it's still good for a case when your host doesn't have ssh-copy-id program, like freebsd or macosX do

Comment by codesnik 302 weeks and 6 days ago

if you forget about ssh-copy-id, I like this version better which works even on a new machine:

cat ~/.ssh/id_rsa.pub | ssh machine 'mkdir .ssh ; cat >>.ssh/authorized_keys'

to test:

ssh machine id

If it asks for a password, it's not working. Sometimes a server will disable passwordless logins.

Comment by shavenwarthog 302 weeks and 6 days ago

ssh-copy-id fails if you have running sshd in other port than 22. This method work for this situation.

Comment by starchox 297 weeks and 1 day ago

a temp solution for the workaround with ssh-copy-id for sshd in other port

ssh-copy-id '-p 12345 user@machine'
Comment by starchox 297 weeks and 1 day ago

@pixel, @fzero scp would completely replace the authorized_keys file; cat >> appends.

Comment by mfisher911 294 weeks ago

What about rsync?

Comment by hced 153 weeks and 6 days ago

For those of you asking why not just use scp or rsync, this is a solution to replace ssh-copy-id for OS's that don't have it natively (i.e. OS X). To use scp or setup rsync wouldn't be an issue if you only had a few servers. However, I have over 300 servers I needed to setup my public key on and scp or rsync would have been time prohibitive.

I did however find someone who built a shell script that you can use as ssh-copy-id command that helped me immensely. It can be found at http://phildawson.tumblr.com/post/484798267/ssh-copy-id-in-mac-os-x

I then just created a list of all my hosts from my SecureCRT .ini files and dumped them into a file called HOSTS.

I then just ran this command:

for i in $(cat HOSTS); do ssh-copy-id user@$i; done

Did over 300 servers in less than 10 mins!

Comment by boogybren 143 weeks and 2 days ago

On OS X you can install ssh-copy-id via Homebrew

Comment by alecthegeek 74 weeks ago

if you ignore about ssh-copy-id, I like this edition better which performs even on a new machine:

cat ~/.ssh/id_rsa.pub | ssh device 'mkdir .ssh ; cat >>.ssh/authorized_keys'

to test: ssh device id

If it demands a security password, it's not operating. Sometimes a server will turn off passwordless logins.\

Read more android phone news http://www.moonarstore.com/s4-smartphone-android-23-os-sc8810-wifi-50-inch-quadcore-white-color-p-1613.html

Comment by nihaoyanasister 59 weeks ago

if you can't/won't use ssh-copy-id, note that .ssh and authorized_keys may need tweaks to avoid issues (http://unix.stackexchange.com/questions/36540/why-am-i-still-getting-a-password-prompt-with-ssh-with-public-key-authentication, http://serverfault.com/questions/321534/public-key-authentication-fails-only-when-sshd-is-daemon)

# permissions:

chmod 700 ~/.ssh; chmod 600 ~/.ssh/*

# and maybe also:

restorecon -r -vv ~/.ssh
Comment by pratalife 52 weeks and 5 days ago

Your point of view

You must be signed in to comment.

Related sites and podcasts