On different systems? Why do you want to connect them?
Usually Bitcoin nodes connect automatically to whatever other node is reachable and meets certain conditions (e.g. not sending bogus or invalid data).
To connect to a peer, you send a version message containing your version number, block count, and current time. The remote peer will send back a verack message and his own version message if he is accepting connections from your version. You will respond with your own verack if you are accepting connections from his version.
The time data from all of your peers is collected, and the median is used by Bitcoin for all network tasks that use the time (except for other version messages).
You then exchange getaddr and addr messages, storing all addresses that you don't know about. addr messages often contain only one address, but sometimes contain up to 1000. This is most common at the beginning of an exchange.
If thirty minutes or more has passed since the client has transmitted any messages it will transmit a message to keep the connection to the peer node alive.
If ninety minutes has passed since a peer node has communicated any messages, then the client will assume that connection has closed.
According to [1], you can directly connect to another node using
addnode. Then check connection using
getaddednodeinfo.
[1]
https://en.bitcoin.it/wiki/Original_Bitcoin_client/API_calls_list