Blog Archive

Monday, February 17, 2025

How to set up remote ssh without password from VSCode

 You can set up passwordless SSH access from VSCode by using SSH keys. Here’s how:

  1. Generate an SSH key pair (if you don’t have one):
    Open your terminal and run:

    ssh-keygen -t rsa -b 4096

    Follow the prompts. If you want a completely passwordless experience, leave the passphrase empty.

  2. Copy your public key to the remote server:
    Use the ssh-copy-id command: (you need replace with your own info)

    ssh-copy-id username@remote_server_address

    This adds your public key (typically ~/.ssh/id_rsa.pub) to the ~/.ssh/authorized_keys file on the remote machine.

  3. Verify remote SSH settings:
    Ensure the remote server’s SSH configuration (usually in /etc/ssh/sshd_config) has PubkeyAuthentication yes enabled, and that the ~/.ssh directory and authorized_keys file have the correct permissions.

  4. Configure your SSH client (optional but useful):
    Edit (or create) the ~/.ssh/config  (it is on C:\Users\<YourUsername>\.ssh in windows OS) file on your local machine with an entry like:

    Host my-remote HostName remote_server_address User username IdentityFile ~/.ssh/id_rsa

    This simplifies the connection process.

  5. Connect using VSCode’s Remote - SSH extension:

    • Install the Remote - SSH extension in VSCode if you haven’t already.
    • Open the Command Palette (Ctrl+Shift+P or Cmd+Shift+P) and type “Remote-SSH: Connect to Host…”.
    • Select the host (either from your SSH config or enter it manually).

VSCode will use your SSH key for authentication, allowing you to log in without entering a password.


FAQ:

Q1) Where to find ~/.ssh in windows OS?

A1) On Windows, the equivalent of the ~/.ssh folder is located in your user profile directory, typically at:    

C:\Users\<YourUsername>\.ssh

Q2) How to solve?

ssh-copy-id username@remote_server_address ssh-copy-id : The term 'ssh-copy-id' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. At line:1 char:1 + ssh-copy-id username@remote_server_address + ~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (ssh-copy-id:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException

A2: (replace username and remote_server_address with your own case)
type $env:USERPROFILE\.ssh\id_rsa.pub | ssh username@remote_server_address "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Saturday, February 1, 2025

Tutorial: load(s) and dump(s) for Json

 

>>> help(json.load)

load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

    Deserialize ``fp`` (a ``.read()``-supporting file-like object containing a JSON document) to a Python object.                

 

help(json.loads)

loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

    Deserialize ``s`` (a ``str``, ``bytes`` or ``bytearray`` instance containing a JSON document) to a Python object.

 


Example using json.load

Assume you have a file named data.json with the following content:

{

  "name": "Alice",

  "age": 25,

  "city": "NY"

}

You can load this JSON data into a Python dictionary as follows:

import json

# Open the JSON file and parse its content

with open('data.json', 'r') as file:

    data = json.load(file)

print(data)

# Output:{'name': 'Alice', 'age': 25, 'city': 'NY'}

 

Example using json.loads

Suppose you have a JSON string:

import json

json_string='{"name":"Bob", "age":30,"city": "NY"}'

# Parse the JSON string into a Python dictionary

data = json.loads(json_string)

print(data)

# Output: {'name': 'Bob', 'age': 30, 'city': 'NY'}

 

Example:

1. Saving a Dictionary to a JSON File

You can use the json.dump function to write a dictionary to a file in JSON format. This method writes the data directly to the file in a structured JSON format, which is easy to read back later using json.load.

 

import json

 

data = {

    "name": "Alice",

    "age": 25,

    "city": "Wonderland"

}

 

# Open a file in write mode and dump the dictionary as JSON

with open('data.json', 'w') as json_file:

    json.dump(data, json_file, indent=4)  # 'indent=4' makes the output nicely formatted

 

 

2. Saving a Dictionary to a Text File as a String

There are two common approaches depending on what string format you need:

 

Method A: Using str()

This method writes the Python dictionary's string representation to the file. Note that this representation is not valid JSON but rather the standard Python dictionary format.

 

data = {

    "name": "Alice",

    "age": 25,

    "city": "Wonderland"

}

 

# Open a text file in write mode and write the dictionary as a string

with open('data.txt', 'w') as text_file:

    text_file.write(str(data))

 

The content of data.txt will look like:

{'name': 'Alice', 'age': 25, 'city': 'Wonderland'}

 

 

Method B: Using json.dumps()

If you prefer to store the dictionary as a JSON-formatted string in a text file (which is both human-readable and can be easily parsed later), you can convert it to a string first with json.dumps and then write it.

import json

data = {

    "name": "Alice",

    "age": 25,

    "city": "Wonderland"

}

 

# Convert the dictionary to a JSON formatted string

json_string = json.dumps(data, indent=4)

# Open a text file in write mode and write the JSON string

with open('data.txt', 'w') as text_file:

    text_file.write(json_string)

The resulting data.txt will contain:

 

{

    "name": "Alice",

    "age": 25,

    "city": "Wonderland"

}

Summary

json.dump: Directly writes a dictionary to a file as JSON.

str(): Converts the dictionary to its Python string representation.

json.dumps: Converts the dictionary to a JSON formatted string, which can then be written to a text file.

Choose the method that best fits your needs for later reading or processing the file.

 


 

 

 

 


help me fix: >>> sx

"{'name': 'Bob', 'age': 30, 'city': 'Builderland'}"

>>> sd = json.loads(sx)

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.12_3.12.2288.0_x64__qbz5n2kfra8p0\Lib\json\__init__.py", line 346, in loads

    return _default_decoder.decode(s)

           ^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.12_3.12.2288.0_x64__qbz5n2kfra8p0\Lib\json\decoder.py", line 338, in decode

    obj, end = self.raw_decode(s, idx=_w(s, 0).end())

               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.12_3.12.2288.0_x64__qbz5n2kfra8p0\Lib\json\decoder.py", line 354, in raw_decode

    obj, end = self.scan_once(s, idx)

               ^^^^^^^^^^^^^^^^^^^^^^

json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

 

GPT:

The error occurs because JSON requires double quotes (") for both keys and string values, but your string uses single quotes ('). Here are two ways to fix this:

 

1. Convert the String to Valid JSON

If you can change the string to proper JSON format, use double quotes. For example:

import json

# Valid JSON string with double quotes

sx = '{"name": "Bob", "age": 30, "city": "Builderland"}'

sd = json.loads(sx)

print(sd)

 

2. Use ast.literal_eval for a Python Literal

If you have a string in Python's dictionary format (using single quotes) and you want to convert it into a dictionary, you can use the ast.literal_eval function:

import ast

sx = "{'name': 'Bob', 'age': 30, 'city': 'Builderland'}"

sd = ast.literal_eval(sx) # sd is a dict

print(sd)

This will also output:

#{'name': 'Bob', 'age': 30, 'city': 'Builderland'}

 

str(sd) == sx # return True

 

 

Please comment the following two strings from the perspetive of JSON read and write. which one is preferred?

string1='{"name":"Bob", "age":30,"city": "NY"}'  

string2="{'name': 'Bob', 'age': 30, 'city': 'NY'}"

 

Answer: string1 is preferred and valid JSON format.

 

Best Practice:

Always use json.dumps() to generate JSON strings from Python dictionaries, as it will ensure the proper formatting (i.e., using double quotes).